diff --git a/Applications/CMakeLists.txt b/Applications/CMakeLists.txt index 558a531c3e..6e731617cb 100644 --- a/Applications/CMakeLists.txt +++ b/Applications/CMakeLists.txt @@ -1,36 +1,31 @@ set(MITK_CPACK_PACKAGE_EXECUTABLES "" CACHE INTERNAL "Collecting windows shortcuts to executables" FORCE) set(MITK_DIR ${PROJECT_BINARY_DIR}) set(MITK_EXPORTS_FILE_INCLUDED 1) if(MITK_USE_Qt5) - #[[ See T27701 - if(MITK_USE_CTK) - add_subdirectory(PluginGenerator) - endif()]] - if(MITK_USE_BLUEBERRY) foreach(MITK_EXTENSION_DIR ${MITK_DIR_PLUS_EXTENSION_DIRS}) set(MITK_APPLICATIONS_EXTENSION_DIR ${MITK_EXTENSION_DIR}/Applications) get_filename_component(MITK_APPLICATIONS_EXTENSION_DIR ${MITK_APPLICATIONS_EXTENSION_DIR} ABSOLUTE) if(EXISTS ${MITK_APPLICATIONS_EXTENSION_DIR}/AppList.cmake) set(MITK_APPS "") include(${MITK_APPLICATIONS_EXTENSION_DIR}/AppList.cmake) foreach(mitk_app ${MITK_APPS}) # extract target_dir and option_name string(REPLACE "^^" "\\;" target_info ${mitk_app}) set(target_info_list ${target_info}) list(GET target_info_list 0 target_dir) list(GET target_info_list 1 option_name) # check if the application is enabled if(${option_name} OR MITK_BUILD_ALL_APPS) add_subdirectory(${MITK_APPLICATIONS_EXTENSION_DIR}/${target_dir} ${target_dir}) endif() endforeach() endif() endforeach() endif() endif() diff --git a/Applications/PluginGenerator/CMakeLists.txt b/Applications/PluginGenerator/CMakeLists.txt deleted file mode 100644 index 0fa99551a6..0000000000 --- a/Applications/PluginGenerator/CMakeLists.txt +++ /dev/null @@ -1,73 +0,0 @@ -if (${CMAKE_SOURCE_DIR} EQUAL ${PROJECT_SOURCE_DIR}) - cmake_minimum_required(VERSION 3.18 FATAL_ERROR) -endif() - -project(MitkPluginGenerator) - -set(VERSION_MAJOR 1) -set(VERSION_MINOR 5) -set(VERSION_PATCH 0) - -set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") - -if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) - set(standalone_build 1) -else() - set(standalone_build 0) -endif() - -#----------------------------------------------------------------------------- -# Prerequisites -#----------------------------------------------------------------------------- - -find_package(Qt5Core REQUIRED) - -configure_file("${CMAKE_CURRENT_SOURCE_DIR}/PluginGeneratorConfig.h.in" - "${CMAKE_CURRENT_BINARY_DIR}/PluginGeneratorConfig.h" @ONLY) -include_directories("${CMAKE_CURRENT_BINARY_DIR}") - -#----------------------------------------------------------------------------- -# Executable -#----------------------------------------------------------------------------- - -set(src_files - PluginGenerator.cpp - ctkCommandLineParser.cpp -) - -qt5_wrap_cpp(src_files ctkCommandLineParser.h OPTIONS -DBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) -qt5_add_resources(src_files plugin_template.qrc project_template.qrc) - -set(exec_target ${PROJECT_NAME}) -add_executable(${exec_target} ${src_files}) -set_property(TARGET ${exec_target} PROPERTY FOLDER "${MITK_ROOT_FOLDER}/Applications/PluginGenerator") - -target_link_libraries(${exec_target} Qt5::Core) - -#----------------------------------------------------------------------------- -# Win32 Convenience -#----------------------------------------------------------------------------- - -if(WIN32 AND NOT standalone_build) - file(TO_NATIVE_PATH "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}" native_runtime_dir) - add_custom_target(NewPlugin start "MITK PluginGenerator" /D "${native_runtime_dir}" cmd /K ${exec_target}.exe -h - DEPENDS ${exec_target}) - set_property(TARGET NewPlugin PROPERTY FOLDER "${MITK_ROOT_FOLDER}/Applications/PluginGenerator") -endif() - -#----------------------------------------------------------------------------- -# Testing -#----------------------------------------------------------------------------- - -if(NOT standalone_build) - # Test the plugin generator - include(mitkTestPluginGenerator) -endif() - -#----------------------------------------------------------------------------- -# Packaging support -#----------------------------------------------------------------------------- - -if(standalone_build) - include(SetupPackaging.cmake) -endif() diff --git a/Applications/PluginGenerator/COPYRIGHT_HEADER b/Applications/PluginGenerator/COPYRIGHT_HEADER deleted file mode 100644 index f92933ddeb..0000000000 --- a/Applications/PluginGenerator/COPYRIGHT_HEADER +++ /dev/null @@ -1,11 +0,0 @@ -/*============================================================================ - -The Medical Imaging Interaction Toolkit (MITK) - -Copyright (c) German Cancer Research Center (DKFZ) -All rights reserved. - -Use of this source code is governed by a 3-clause BSD license that can be -found in the LICENSE file. - -============================================================================*/ diff --git a/Applications/PluginGenerator/Changelog.txt b/Applications/PluginGenerator/Changelog.txt deleted file mode 100644 index e29ddb89ac..0000000000 --- a/Applications/PluginGenerator/Changelog.txt +++ /dev/null @@ -1,54 +0,0 @@ -This is the change log for the MITK Plugin Generator - -Changes since version 1.3.0 -====================================================================== - -Changes in the generated files ----------------------------------------------------------------------- - - - The generated View does not have a hard dependency on the - QmitkStdMultiWidgetEditor editor anymore. - -Changes since version 1.2.0 -====================================================================== - -Changes in the generated files ----------------------------------------------------------------------- - -- Added gcc linker flag --as-needed to get same behavior as on Windows -- Improved MITK superbuild configuration options - -Changes since version 1.1.1 -====================================================================== - -Changes in the MITKPluginGenerator executable ----------------------------------------------------------------------- - -- Added a visual clue in the help text about required arguments. -- Added support for checking for new versions online. - -Changes in the generated files ----------------------------------------------------------------------- - -- The plug-in activator class and file name are now derived from - the plug-in symbolic name. -- Adapted to changes in CTK CMake macros. -- Improved generated superbuild script to correctly pass -j options. -- Using new BlueBerry FunctionCreateBlueBerryApplication() macro - to create the demo application. - -Changes since version 1.0.0 -====================================================================== - -Changes in the MITKPluginGenerator executable ----------------------------------------------------------------------- - -- Added printing the version number to the console. -- Added hint how to get more help if something went wrong. - -Changes in the generated files ----------------------------------------------------------------------- - -- Fixed user manual for the generated plugin. -- Added comments in the generated project's CMakeLists.txt file about - how to set-up the MITK module system. diff --git a/Applications/PluginGenerator/LICENSE b/Applications/PluginGenerator/LICENSE deleted file mode 100644 index 597f16cd21..0000000000 --- a/Applications/PluginGenerator/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2003-2019, German Cancer Research Center (DKFZ) -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * 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. - - * Neither the name of the German Cancer Research Center (DKFZ), 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. diff --git a/Applications/PluginGenerator/PluginGenerator.cpp b/Applications/PluginGenerator/PluginGenerator.cpp deleted file mode 100644 index 3f13d8aebf..0000000000 --- a/Applications/PluginGenerator/PluginGenerator.cpp +++ /dev/null @@ -1,547 +0,0 @@ -/*============================================================================ - -The Medical Imaging Interaction Toolkit (MITK) - -Copyright (c) German Cancer Research Center (DKFZ) -All rights reserved. - -Use of this source code is governed by a 3-clause BSD license that can be -found in the LICENSE file. - -============================================================================*/ - -#include "ctkCommandLineParser.h" -#include - -#include -#include -#include -#include -#include -#include - -//#include -//#include - -#include -#include -#include -#include - -int compareVersions(const QString &v1, const QString &v2) -{ - QList t1; - foreach (QString t, v1.split('.')) - { - t1.append(t.toInt()); - } - - QList t2; - foreach (QString t, v2.split('.')) - { - t2.append(t.toInt()); - } - - // pad with 0 - if (t1.size() < t2.size()) - { - for (int i = 0; i < t2.size() - t1.size(); ++i) - t1.append(0); - } - else - { - for (int i = 0; i < t1.size() - t2.size(); ++i) - t2.append(0); - } - - for (int i = 0; i < t1.size(); ++i) - { - if (t1.at(i) < t2.at(i)) - return -1; - else if (t1.at(i) > t2.at(i)) - return 1; - } - return 0; -} - -/*int checkUpdates(QTextStream &out) -{ - out << "Checking for updates... "; - out.flush(); - QNetworkAccessManager manager; - QNetworkReply *reply = - manager.get(QNetworkRequest(QUrl("https://www.mitk.org/wiki/PluginGeneratorUpdate?action=raw"))); - - QEventLoop eventLoop; - reply->connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit())); - eventLoop.exec(); - - QByteArray data = reply->readAll(); - - if (data.isEmpty()) - { - qCritical() << "A network error occured:" << reply->errorString(); - return EXIT_FAILURE; - } - delete reply; - - QBuffer buffer(&data); - buffer.open(QIODevice::ReadOnly); - bool versionFound = false; - while (buffer.canReadLine()) - { - QString line = buffer.readLine(); - if (!versionFound) - { - line = line.trimmed(); - if (line.isEmpty()) - continue; - - if (compareVersions(PLUGIN_GENERATOR_VERSION, line) < 0) - { - versionFound = true; - out << "New version " << line << " available.\n"; - } - else - { - // no update available - out << "No update available.\n"; - out.flush(); - return EXIT_SUCCESS; - } - } - else - { - out << line; - } - } - - if (!versionFound) - { - qCritical() << "Update information not readable."; - return EXIT_FAILURE; - } - - out << '\n'; - out.flush(); - - return EXIT_SUCCESS; -}*/ - -bool readAnswer(char defaultAnswer) -{ - std::string line; - std::cin >> std::noskipws >> line; - - // consume the new line character - std::cin.clear(); - std::cin.ignore(std::numeric_limits::max(), '\n'); - - char answer = defaultAnswer; - if (!line.empty() && line[0] != '\n') - { - answer = std::tolower(line[0]); - } - - if (answer == 'y') - return true; - if (answer == 'n') - return false; - if (defaultAnswer == 'y') - return true; - return false; -} - -void createFilePathMapping(const QString &templateName, - const QString &baseInDir, - const QString &baseOutDir, - QHash &fileNameMapping) -{ - QFileInfo info(templateName); - if (info.isDir()) - { - QStringList subEntries = QDir(templateName).entryList(); - foreach (QString subEntry, subEntries) - { - createFilePathMapping(templateName + "/" + subEntry, baseInDir, baseOutDir, fileNameMapping); - } - return; - } - - fileNameMapping[templateName] = QString(templateName).replace(baseInDir, baseOutDir); -} - -QHash createTemplateFileMapping(const QString &qrcBase, - const QString &baseOutDir, - const QHash &fileNameMapping) -{ - QHash filePathMapping; - createFilePathMapping(qrcBase, qrcBase, baseOutDir, filePathMapping); - - QMutableHashIterator i(filePathMapping); - while (i.hasNext()) - { - i.next(); - QHashIterator j(fileNameMapping); - while (j.hasNext()) - { - j.next(); - i.setValue(i.value().replace(j.key(), j.value())); - } - } - - return filePathMapping; -} - -bool generateFiles(const QHash ¶meters, const QHash &filePathMapping) -{ - QHashIterator paths(filePathMapping); - while (paths.hasNext()) - { - paths.next(); - QFile templ(paths.key()); - templ.open(QIODevice::ReadOnly); - QByteArray templContent = templ.readAll(); - - QHashIterator i(parameters); - while (i.hasNext()) - { - i.next(); - templContent.replace(i.key(), QByteArray(i.value().toLatin1())); - } - - QFile outTempl(paths.value()); - QDir dir(QFileInfo(outTempl).dir()); - if (!dir.exists()) - { - if (!dir.mkpath(dir.absolutePath())) - { - qCritical() << "Could not create directory" << dir.absolutePath(); - return EXIT_FAILURE; - } - } - - if (!outTempl.open(QIODevice::WriteOnly)) - { - qCritical() << outTempl.errorString(); - return false; - } - outTempl.write(templContent); - } - - return true; -} - -int main(int argc, char **argv) -{ - QString appName("MitkPluginGenerator"); - - QCoreApplication app(argc, argv); - app.setApplicationName(appName); - app.setOrganizationName("DKFZ"); - - ctkCommandLineParser parser; - // Use Unix-style argument names - parser.setArgumentPrefix("--", "-"); - parser.setStrictModeEnabled(true); - - // Add command line argument names - parser.addArgument("help", "h", QVariant::Bool, " Show this help text"); - parser.addArgument("out-dir", "o", QVariant::String, " Output directory", QDir::tempPath()); - parser.addArgument( - "license", "l", QVariant::String, " Path to a file containing license information", ":/COPYRIGHT_HEADER"); - parser.addArgument("vendor", "v", QVariant::String, " The vendor of the generated code", "German Cancer Research Center (DKFZ)"); - parser.addArgument("quiet", "q", QVariant::Bool, " Do not print additional information"); - parser.addArgument("confirm-all", "y", QVariant::Bool, " Answer all questions with 'yes'"); - //parser.addArgument("check-update", "u", QVariant::Bool, " Check for updates and exit"); - //parser.addArgument("no-networking", "n", QVariant::Bool, " Disable all network requests"); - - parser.beginGroup("Plug-in options"); - parser.addArgument("plugin-symbolic-name", "ps", QVariant::String, "* The plugin's symbolic name"); - parser.setExactMatchRegularExpression("-ps", "^[a-zA-Z]+\\.[a-zA-Z0-9._]+[^\\.]$", "Symbolic name invalid"); - parser.addArgument("plugin-name", "pn", QVariant::String, " The plug-in's human readable name"); - - parser.beginGroup("Plug-in View options"); - parser.addArgument("view-class", "vc", QVariant::String, " The View's' class name"); - parser.addArgument("view-name", "vn", QVariant::String, "* The View's human readable name"); - - parser.beginGroup("Project options"); - parser.addArgument( - "project-copyright", "", QVariant::String, " Path to a file containing copyright information", ":/LICENSE"); - parser.addArgument("project-name", "", QVariant::String, " The project name"); - parser.setExactMatchRegularExpression("--project-name", "^[a-zA-Z_\\-]+$", "Project name invalid"); - parser.addArgument("project-app-name", "", QVariant::String, " The application name"); - parser.setExactMatchRegularExpression("--project-app-name", "^[a-zA-Z_\\-]+$", "Project application name invalid"); - parser.endGroup(); - - // Parse the command line arguments - bool ok = false; - QHash parsedArgs = parser.parseArguments(QCoreApplication::arguments(), &ok); - if (!ok) - { - QTextStream(stderr, QIODevice::WriteOnly) << "Error parsing arguments: " << parser.errorString() << "\nType '" - << appName << " -h' for help\n"; - return EXIT_FAILURE; - } - - QTextStream out(stdout, QIODevice::WriteOnly); - - // Show a help message - if (parsedArgs.contains("help")) - { - out << "A CTK plug-in generator for MITK (version " PLUGIN_GENERATOR_VERSION ")\n\n" - << parser.helpText() << "\n[* - options are required]\n"; - return EXIT_SUCCESS; - } - - /*bool noNetwork = parsedArgs.contains("no-networking"); - - if (parsedArgs.contains("check-update")) - { - if (noNetwork) - { - out << "Network support disabled. Cannot check for updates.\n"; - out.flush(); - } - else - { - return checkUpdates(out); - } - } - else - { - // always check for updates if no-networking is not given - if (!noNetwork) - { - checkUpdates(out); - } - }*/ - - // Check arguments - - // Project options - QString projectName = parsedArgs["project-name"].toString(); - QString projectAppName = parsedArgs["project-app-name"].toString(); - QString copyrightPath = QDir::fromNativeSeparators(parsedArgs["project-copyright"].toString()); - - bool createProject = !projectName.isEmpty(); - if (createProject && projectAppName.isEmpty()) - { - projectAppName = projectName; - } - - QString pluginSymbolicName = parsedArgs["plugin-symbolic-name"].toString(); - if (pluginSymbolicName.isEmpty()) - { - qCritical() << "Required argument 'plugin-symbolic-name' missing."; - qCritical("%s%s%s", "Type '", qPrintable(appName), " -h' for help"); - return EXIT_FAILURE; - } - - QString pluginTarget(pluginSymbolicName); - pluginTarget.replace('.', '_'); - - QString activatorClass = pluginTarget + "_Activator"; - - QString outDir = QDir::fromNativeSeparators(parsedArgs["out-dir"].toString()); - QString licensePath = QDir::fromNativeSeparators(parsedArgs["license"].toString()); - QString pluginExportDirective = pluginSymbolicName.split('.').last().toUpper() + "_EXPORT"; - - QString pluginName = parsedArgs["plugin-name"].toString(); - if (pluginName.isEmpty()) - { - QStringList toks = pluginSymbolicName.split('.'); - pluginName = toks.last(); - pluginName[0] = pluginName[0].toUpper(); - } - - QString vendor = parsedArgs["vendor"].toString(); - - QString viewName = parsedArgs["view-name"].toString(); - if (viewName.isEmpty()) - { - qCritical() << "Required argument 'view-name' missing."; - qCritical("%s%s%s", "Type '", qPrintable(appName), " -h' for help"); - return EXIT_FAILURE; - } - - QStringList toks = viewName.split(QRegExp("\\s"), QString::SkipEmptyParts); - QString viewClass = parsedArgs["view-class"].toString(); - if (viewClass.isEmpty()) - { - foreach (QString tok, toks) - { - QString tmp = tok; - tmp[0] = tmp[0].toUpper(); - viewClass += tmp; - } - } - - QString viewId; - if (viewId.isEmpty()) - { - viewId = "org.mitk.views."; - foreach (QString tok, toks) - { - viewId += tok.toLower(); - } - } - - bool quiet = parsedArgs.contains("quiet"); - bool autoConfirm = parsedArgs.contains("confirm-all"); - - if (!outDir.endsWith('/')) - outDir += '/'; - if (createProject) - outDir += projectName; - else - outDir += pluginSymbolicName; - - // Print the collected information - if (!quiet) - { - if (createProject) - { - out << "Using the following information to create a project:\n\n" - << " Project Name: " << projectName << '\n' - << " Application Name: " << projectAppName << '\n' - << " Copyright File: " << QDir::toNativeSeparators(copyrightPath) << '\n'; - } - else - { - out << "Using the following information to create a plug-in:\n\n"; - } - - out << " License File: " << QDir::toNativeSeparators(licensePath) << '\n' - << " Plugin-SymbolicName: " << pluginSymbolicName << '\n' - << " Plugin-Name: " << pluginName << '\n' - << " Plugin-Vendor: " << vendor << '\n' - << " View Name: " << viewName << '\n' - << " View Id: " << viewId << '\n' - << " View Class: " << viewClass << '\n' - << '\n' - << "Create in: " << outDir << '\n' - << '\n'; - - if (!autoConfirm) - out << "Continue [Y/n]? "; - - out.flush(); - - if (!autoConfirm && !readAnswer('y')) - { - out << "Aborting.\n"; - return EXIT_SUCCESS; - } - } - - // Check the output directory - if (!QDir(outDir).exists()) - { - if (!autoConfirm) - { - out << "Directory '" << outDir << "' does not exist. Create it [Y/n]? "; - out.flush(); - } - - if (autoConfirm || readAnswer('y')) - { - if (!QDir().mkpath(outDir)) - { - qCritical() << "Could not create directory:" << outDir; - return EXIT_FAILURE; - } - } - else - { - out << "Aborting.\n"; - return EXIT_SUCCESS; - } - } - - if (!QDir(outDir).entryList(QDir::AllEntries | QDir::NoDotAndDotDot).isEmpty()) - { - if (!autoConfirm) - { - out << "Directory '" << outDir << "' is not empty. Continue [y/N]? "; - out.flush(); - } - - if (!autoConfirm && !readAnswer('n')) - { - out << "Aborting.\n"; - return EXIT_SUCCESS; - } - } - - // Extract the license text - QFile licenseFile(licensePath); - if (!licenseFile.open(QIODevice::ReadOnly)) - { - qCritical() << "Cannot open file" << licenseFile.fileName(); - return EXIT_FAILURE; - } - QString licenseText = licenseFile.readAll(); - licenseFile.close(); - - QHash parameters; - if (createProject) - { - // Extract the copyright - QFile copyrightFile(copyrightPath); - if (!copyrightFile.open(QIODevice::ReadOnly)) - { - qCritical() << "Cannot open file" << copyrightFile.fileName(); - return EXIT_FAILURE; - } - QString copyrighText = copyrightFile.readAll(); - copyrightFile.close(); - - parameters["$(copyright)"] = copyrighText; - parameters["$(project-name)"] = projectName; - parameters["$(project-app-name)"] = projectAppName; - parameters["$(project-plugins)"] = QString("Plugins/") + pluginSymbolicName + ":ON"; - - QStringList toks = pluginTarget.split("_"); - QString projectPluginBase = toks[0] + "_" + toks[1]; - parameters["$(project-plugin-base)"] = projectPluginBase; - } - parameters["$(license)"] = licenseText; - parameters["$(plugin-name)"] = pluginName; - parameters["$(plugin-symbolic-name)"] = pluginSymbolicName; - parameters["$(vendor)"] = vendor; - parameters["$(plugin-target)"] = pluginTarget; - parameters["$(plugin-export-directive)"] = pluginExportDirective; - parameters["$(view-id)"] = viewId; - parameters["$(view-name)"] = viewName; - parameters["$(view-file-name)"] = viewClass; - parameters["$(view-class-name)"] = viewClass; - parameters["$(activator-file-name)"] = activatorClass; - parameters["$(activator-class-name)"] = activatorClass; - - if (createProject) - { - QHash projectFileNameMapping; - projectFileNameMapping["TemplateApp"] = projectAppName; - - QHash filePathMapping = - createTemplateFileMapping(":/ProjectTemplate", outDir, projectFileNameMapping); - generateFiles(parameters, filePathMapping); - } - - QHash pluginFileNameMapping; - pluginFileNameMapping["QmitkTemplateView"] = viewClass; - pluginFileNameMapping["mitkPluginActivator"] = activatorClass; - - if (createProject) - { - if (!outDir.endsWith('/')) - outDir += '/'; - outDir += "Plugins/" + pluginSymbolicName; - } - QHash filePathMapping = - createTemplateFileMapping(":/PluginTemplate", outDir, pluginFileNameMapping); - generateFiles(parameters, filePathMapping); - - return EXIT_SUCCESS; -} diff --git a/Applications/PluginGenerator/PluginGeneratorConfig.h.in b/Applications/PluginGenerator/PluginGeneratorConfig.h.in deleted file mode 100644 index 69b65a5ce6..0000000000 --- a/Applications/PluginGenerator/PluginGeneratorConfig.h.in +++ /dev/null @@ -1,18 +0,0 @@ -/*============================================================================ - -The Medical Imaging Interaction Toolkit (MITK) - -Copyright (c) German Cancer Research Center (DKFZ) -All rights reserved. - -Use of this source code is governed by a 3-clause BSD license that can be -found in the LICENSE file. - -============================================================================*/ - -#ifndef PLUGINGENERATORCONFIG_H -#define PLUGINGENERATORCONFIG_H - -#define PLUGIN_GENERATOR_VERSION "@VERSION_STRING@" - -#endif diff --git a/Applications/PluginGenerator/PluginTemplate/CMakeLists.txt b/Applications/PluginGenerator/PluginTemplate/CMakeLists.txt deleted file mode 100644 index f859fc08a5..0000000000 --- a/Applications/PluginGenerator/PluginTemplate/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -project($(plugin-target)) - -mitk_create_plugin( - EXPORT_DIRECTIVE $(plugin-export-directive) - EXPORTED_INCLUDE_SUFFIXES src - MODULE_DEPENDS MitkQtWidgetsExt -) diff --git a/Applications/PluginGenerator/PluginTemplate/documentation/UserManual/Manual.dox b/Applications/PluginGenerator/PluginTemplate/documentation/UserManual/Manual.dox deleted file mode 100755 index 481dc52e49..0000000000 --- a/Applications/PluginGenerator/PluginTemplate/documentation/UserManual/Manual.dox +++ /dev/null @@ -1,17 +0,0 @@ -/** -\page $(plugin-target) The $(plugin-name) - -\imageMacro{icon.png,"Icon of $(plugin-name)",2.00} - -\tableofcontents - -\section $(plugin-target)Overview Overview -Describe the features of your awesome plugin here -
    -
  • Increases productivity -
  • Creates beautiful images -
  • Generates PhD thesis -
  • Brings world peace -
- -*/ diff --git a/Applications/PluginGenerator/PluginTemplate/documentation/UserManual/icon.png b/Applications/PluginGenerator/PluginTemplate/documentation/UserManual/icon.png deleted file mode 100644 index fe3fbee85e..0000000000 Binary files a/Applications/PluginGenerator/PluginTemplate/documentation/UserManual/icon.png and /dev/null differ diff --git a/Applications/PluginGenerator/PluginTemplate/documentation/doxygen/modules.dox b/Applications/PluginGenerator/PluginTemplate/documentation/doxygen/modules.dox deleted file mode 100644 index 9dcb60e028..0000000000 --- a/Applications/PluginGenerator/PluginTemplate/documentation/doxygen/modules.dox +++ /dev/null @@ -1,16 +0,0 @@ -/** - \defgroup $(plugin-target) $(plugin-symbolic-name) - \ingroup MITKPlugins - - \brief Describe your plugin here. - -*/ - -/** - \defgroup $(plugin-target)_internal Internal - \ingroup $(plugin-target) - - \brief This subcategory includes the internal classes of the $(plugin-symbolic-name) plugin. Other - plugins must not rely on these classes. They contain implementation details and their interface - may change at any time. We mean it. -*/ diff --git a/Applications/PluginGenerator/PluginTemplate/files.cmake b/Applications/PluginGenerator/PluginTemplate/files.cmake deleted file mode 100644 index c1b3369574..0000000000 --- a/Applications/PluginGenerator/PluginTemplate/files.cmake +++ /dev/null @@ -1,42 +0,0 @@ -set(SRC_CPP_FILES - -) - -set(INTERNAL_CPP_FILES - $(activator-file-name).cpp - $(view-file-name).cpp -) - -set(UI_FILES - src/internal/$(view-file-name)Controls.ui -) - -set(MOC_H_FILES - src/internal/$(activator-file-name).h - src/internal/$(view-file-name).h -) - -# list of resource files which can be used by the plug-in -# system without loading the plug-ins shared library, -# for example the icon used in the menu and tabs for the -# plug-in views in the workbench -set(CACHED_RESOURCE_FILES - resources/icon.xpm - plugin.xml -) - -# list of Qt .qrc files which contain additional resources -# specific to this plugin -set(QRC_FILES - -) - -set(CPP_FILES ) - -foreach(file ${SRC_CPP_FILES}) - set(CPP_FILES ${CPP_FILES} src/${file}) -endforeach(file ${SRC_CPP_FILES}) - -foreach(file ${INTERNAL_CPP_FILES}) - set(CPP_FILES ${CPP_FILES} src/internal/${file}) -endforeach(file ${INTERNAL_CPP_FILES}) diff --git a/Applications/PluginGenerator/PluginTemplate/manifest_headers.cmake b/Applications/PluginGenerator/PluginTemplate/manifest_headers.cmake deleted file mode 100644 index cc383dba7b..0000000000 --- a/Applications/PluginGenerator/PluginTemplate/manifest_headers.cmake +++ /dev/null @@ -1,5 +0,0 @@ -set(Plugin-Name "$(plugin-name)") -set(Plugin-Version "0.1") -set(Plugin-Vendor "$(vendor)") -set(Plugin-ContactAddress "") -set(Require-Plugin org.mitk.gui.qt.common) diff --git a/Applications/PluginGenerator/PluginTemplate/plugin.xml b/Applications/PluginGenerator/PluginTemplate/plugin.xml deleted file mode 100644 index edacef0b6f..0000000000 --- a/Applications/PluginGenerator/PluginTemplate/plugin.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - diff --git a/Applications/PluginGenerator/PluginTemplate/resources/icon.png b/Applications/PluginGenerator/PluginTemplate/resources/icon.png deleted file mode 100644 index fe3fbee85e..0000000000 Binary files a/Applications/PluginGenerator/PluginTemplate/resources/icon.png and /dev/null differ diff --git a/Applications/PluginGenerator/PluginTemplate/resources/icon.xpm b/Applications/PluginGenerator/PluginTemplate/resources/icon.xpm deleted file mode 100644 index 9057c20bc6..0000000000 --- a/Applications/PluginGenerator/PluginTemplate/resources/icon.xpm +++ /dev/null @@ -1,21 +0,0 @@ -/* XPM */ -static const char * icon_xpm[] = { -"16 16 2 1", -" c #FF0000", -". c #000000", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" "}; diff --git a/Applications/PluginGenerator/PluginTemplate/src/internal/QmitkTemplateView.cpp b/Applications/PluginGenerator/PluginTemplate/src/internal/QmitkTemplateView.cpp deleted file mode 100644 index e538a255ed..0000000000 --- a/Applications/PluginGenerator/PluginTemplate/src/internal/QmitkTemplateView.cpp +++ /dev/null @@ -1,87 +0,0 @@ -$(license) - -// Blueberry -#include -#include - -// Qmitk -#include "$(view-file-name).h" - -// Qt -#include - -// mitk image -#include - -const std::string $(view-class-name)::VIEW_ID = "$(view-id)"; - -void $(view-class-name)::SetFocus() -{ - m_Controls.buttonPerformImageProcessing->setFocus(); -} - -void $(view-class-name)::CreateQtPartControl(QWidget *parent) -{ - // create GUI widgets from the Qt Designer's .ui file - m_Controls.setupUi(parent); - connect(m_Controls.buttonPerformImageProcessing, &QPushButton::clicked, this, &$(view-class-name)::DoImageProcessing); -} - -void $(view-class-name)::OnSelectionChanged(berry::IWorkbenchPart::Pointer /*source*/, - const QList &nodes) -{ - // iterate all selected objects, adjust warning visibility - foreach (mitk::DataNode::Pointer node, nodes) - { - if (node.IsNotNull() && dynamic_cast(node->GetData())) - { - m_Controls.labelWarning->setVisible(false); - m_Controls.buttonPerformImageProcessing->setEnabled(true); - return; - } - } - - m_Controls.labelWarning->setVisible(true); - m_Controls.buttonPerformImageProcessing->setEnabled(false); -} - -void $(view-class-name)::DoImageProcessing() -{ - QList nodes = this->GetDataManagerSelection(); - if (nodes.empty()) - return; - - mitk::DataNode *node = nodes.front(); - - if (!node) - { - // Nothing selected. Inform the user and return - QMessageBox::information(nullptr, "Template", "Please load and select an image before starting image processing."); - return; - } - - // here we have a valid mitk::DataNode - - // a node itself is not very useful, we need its data item (the image) - mitk::BaseData *data = node->GetData(); - if (data) - { - // test if this data item is an image or not (could also be a surface or something totally different) - mitk::Image *image = dynamic_cast(data); - if (image) - { - std::stringstream message; - std::string name; - message << "Performing image processing for image "; - if (node->GetName(name)) - { - // a property called "name" was found for this DataNode - message << "'" << name << "'"; - } - message << "."; - MITK_INFO << message.str(); - - // actually do something here... - } - } -} diff --git a/Applications/PluginGenerator/PluginTemplate/src/internal/QmitkTemplateView.h b/Applications/PluginGenerator/PluginTemplate/src/internal/QmitkTemplateView.h deleted file mode 100644 index 9bf52d0733..0000000000 --- a/Applications/PluginGenerator/PluginTemplate/src/internal/QmitkTemplateView.h +++ /dev/null @@ -1,44 +0,0 @@ -$(license) - -#ifndef $(view-file-name)_h -#define $(view-file-name)_h - -#include - -#include - -#include "ui_$(view-file-name)Controls.h" - -/** - \brief $(view-class-name) - - \warning This class is not yet documented. Use "git blame" and ask the author to provide basic documentation. - - \sa QmitkAbstractView - \ingroup ${plugin_target}_internal -*/ -class $(view-class-name) : public QmitkAbstractView -{ - // this is needed for all Qt objects that should have a Qt meta-object - // (everything that derives from QObject and wants to have signal/slots) - Q_OBJECT - -public: - static const std::string VIEW_ID; - -protected: - virtual void CreateQtPartControl(QWidget *parent) override; - - virtual void SetFocus() override; - - /// \brief Overridden from QmitkAbstractView - virtual void OnSelectionChanged(berry::IWorkbenchPart::Pointer source, - const QList &nodes) override; - - /// \brief Called when the user clicks the GUI button - void DoImageProcessing(); - - Ui::$(view-file-name)Controls m_Controls; -}; - -#endif // $(view-file-name)_h diff --git a/Applications/PluginGenerator/PluginTemplate/src/internal/QmitkTemplateViewControls.ui b/Applications/PluginGenerator/PluginTemplate/src/internal/QmitkTemplateViewControls.ui deleted file mode 100644 index 0f3aa65b82..0000000000 --- a/Applications/PluginGenerator/PluginTemplate/src/internal/QmitkTemplateViewControls.ui +++ /dev/null @@ -1,64 +0,0 @@ - - - $(view-file-name)Controls - - - - 0 - 0 - 222 - 161 - - - - - 0 - 0 - - - - QmitkTemplate - - - - - - QLabel { color: rgb(255, 0, 0) } - - - Please select an image! - - - - - - - Do image processing - - - Do Something - - - - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 20 - 220 - - - - - - - - - - diff --git a/Applications/PluginGenerator/PluginTemplate/src/internal/mitkPluginActivator.cpp b/Applications/PluginGenerator/PluginTemplate/src/internal/mitkPluginActivator.cpp deleted file mode 100644 index d69639ad56..0000000000 --- a/Applications/PluginGenerator/PluginTemplate/src/internal/mitkPluginActivator.cpp +++ /dev/null @@ -1,14 +0,0 @@ -$(license) - -#include "$(activator-file-name).h" -#include "$(view-file-name).h" - -namespace mitk -{ - void $(activator-class-name)::start(ctkPluginContext *context) - { - BERRY_REGISTER_EXTENSION_CLASS($(view-class-name), context) - } - - void $(activator-class-name)::stop(ctkPluginContext *context) { Q_UNUSED(context) } -} diff --git a/Applications/PluginGenerator/PluginTemplate/src/internal/mitkPluginActivator.h b/Applications/PluginGenerator/PluginTemplate/src/internal/mitkPluginActivator.h deleted file mode 100644 index 9b14f7d376..0000000000 --- a/Applications/PluginGenerator/PluginTemplate/src/internal/mitkPluginActivator.h +++ /dev/null @@ -1,23 +0,0 @@ -$(license) - -#ifndef $(activator-file-name)_h -#define $(activator-file-name)_h - -#include - -namespace mitk -{ - class $(activator-class-name) : public QObject, public ctkPluginActivator - { - Q_OBJECT - Q_PLUGIN_METADATA(IID "$(plugin-target)") - Q_INTERFACES(ctkPluginActivator) - - public: - void start(ctkPluginContext *context); - void stop(ctkPluginContext *context); - - }; // $(activator-class-name) -} - -#endif // $(activator-file-name)_h diff --git a/Applications/PluginGenerator/ProjectTemplate/Apps/TemplateApp/CMakeLists.txt b/Applications/PluginGenerator/ProjectTemplate/Apps/TemplateApp/CMakeLists.txt deleted file mode 100644 index 2a75238441..0000000000 --- a/Applications/PluginGenerator/ProjectTemplate/Apps/TemplateApp/CMakeLists.txt +++ /dev/null @@ -1,15 +0,0 @@ - -# Plug-ins listed below will not be -# - added as a build-time dependency to the executable -# - listed in the provisioning file for the executable -# - installed if they are external plug-ins - -set(_exclude_plugins - -) - -mitkFunctionCreateBlueBerryApplication( - NAME ${MY_APP_NAME} - DESCRIPTION "MITK - ${MY_APP_NAME} Application" - EXCLUDE_PLUGINS ${_exclude_plugins} -) diff --git a/Applications/PluginGenerator/ProjectTemplate/Apps/TemplateApp/TemplateApp.cpp b/Applications/PluginGenerator/ProjectTemplate/Apps/TemplateApp/TemplateApp.cpp deleted file mode 100644 index 3d39167a7e..0000000000 --- a/Applications/PluginGenerator/ProjectTemplate/Apps/TemplateApp/TemplateApp.cpp +++ /dev/null @@ -1,16 +0,0 @@ -$(license) - -#include - -#include - -int main(int argc, char **argv) -{ - // Create a QApplication instance first - mitk::BaseApplication myApp(argc, argv); - myApp.setApplicationName("TestApp"); - myApp.setOrganizationName("DKFZ"); - - myApp.setProperty(mitk::BaseApplication::PROP_APPLICATION, "org.mitk.qt.extapplication"); - return myApp.run(); -} diff --git a/Applications/PluginGenerator/ProjectTemplate/Apps/TemplateApp/TemplateApp.ini b/Applications/PluginGenerator/ProjectTemplate/Apps/TemplateApp/TemplateApp.ini deleted file mode 100644 index aaab82e17b..0000000000 --- a/Applications/PluginGenerator/ProjectTemplate/Apps/TemplateApp/TemplateApp.ini +++ /dev/null @@ -1,3 +0,0 @@ -BlueBerry.home=@BLUEBERRY_BINARY_DIR@ -BlueBerry.provisioning=@CMAKE_RUNTIME_OUTPUT_DIRECTORY@/@MY_APP_NAME@.provisioning -BlueBerry.qtplugin_path=@BLUEBERRY_QTPLUGIN_PATH@ diff --git a/Applications/PluginGenerator/ProjectTemplate/Apps/TemplateApp/startTemplateApp.bat.in b/Applications/PluginGenerator/ProjectTemplate/Apps/TemplateApp/startTemplateApp.bat.in deleted file mode 100644 index 1f31392d44..0000000000 --- a/Applications/PluginGenerator/ProjectTemplate/Apps/TemplateApp/startTemplateApp.bat.in +++ /dev/null @@ -1,2 +0,0 @@ -PATH=@MITK_RUNTIME_PATH@;@CMAKE_RUNTIME_OUTPUT_DIRECTORY@\@VS_BUILD_TYPE@;@CMAKE_RUNTIME_OUTPUT_DIRECTORY@\plugins\@VS_BUILD_TYPE@;%PATH% -@VS_BUILD_TYPE@\@MY_APP_NAME@.exe diff --git a/Applications/PluginGenerator/ProjectTemplate/CMake/CPackSetup.cmake b/Applications/PluginGenerator/ProjectTemplate/CMake/CPackSetup.cmake deleted file mode 100644 index 9444664b5b..0000000000 --- a/Applications/PluginGenerator/ProjectTemplate/CMake/CPackSetup.cmake +++ /dev/null @@ -1,24 +0,0 @@ -set(CPACK_PACKAGE_NAME ${PROJECT_NAME}) -set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "This is an awesome app") -set(CPACK_PACKAGE_VENDOR "$(vendor)") -set(CPACK_CREATE_DESKTOP_LINKS "${MY_APP_NAME}") -set(CPACK_PACKAGE_DESCRIPTION_FILE "${PROJECT_SOURCE_DIR}/LICENSE") -set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE") -set(CPACK_PACKAGE_VERSION_MAJOR "${${PROJECT_NAME}_VERSION_MAJOR}") -set(CPACK_PACKAGE_VERSION_MINOR "${${PROJECT_NAME}_VERSION_MINOR}") - -# append revision number if available -if(${PROJECT_NAME}_REVISION_ID) - if(${PROJECT_NAME}_WC_TYPE STREQUAL "git") - set(git_hash ${${PROJECT_NAME}_REVISION_ID}) - string(LENGTH "${git_hash}" hash_length) - if(hash_length GREATER 6) - string(SUBSTRING ${git_hash} 0 6 git_hash) - endif() - set(CPACK_PACKAGE_VERSION_PATCH "${${PROJECT_NAME}_VERSION_PATCH}_r${git_hash}") - else() - set(CPACK_PACKAGE_VERSION_PATCH "${${PROJECT_NAME}_VERSION_PATCH}_r${${PROJECT_NAME}_REVISION_ID}") - endif() -else() - set(CPACK_PACKAGE_VERSION_PATCH "${${PROJECT_NAME}_VERSION_PATCH}") -endif() diff --git a/Applications/PluginGenerator/ProjectTemplate/CMake/MacroEmptyExternalProject.cmake b/Applications/PluginGenerator/ProjectTemplate/CMake/MacroEmptyExternalProject.cmake deleted file mode 100644 index 389a055993..0000000000 --- a/Applications/PluginGenerator/ProjectTemplate/CMake/MacroEmptyExternalProject.cmake +++ /dev/null @@ -1,18 +0,0 @@ - -# -# Convenient macro allowing to define a "empty" project in case an external one is provided -# using for example _DIR. -# Doing so allows to keep the external project dependency system happy. -# -macro(MacroEmptyExternalProject proj dependencies) - - ExternalProject_Add(${proj} - DOWNLOAD_COMMAND "" - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - DEPENDS - ${dependencies} - ) - -endmacro() diff --git a/Applications/PluginGenerator/ProjectTemplate/CMakeExternals/MITK.cmake b/Applications/PluginGenerator/ProjectTemplate/CMakeExternals/MITK.cmake deleted file mode 100644 index 43155e16cd..0000000000 --- a/Applications/PluginGenerator/ProjectTemplate/CMakeExternals/MITK.cmake +++ /dev/null @@ -1,211 +0,0 @@ -#----------------------------------------------------------------------------- -# MITK -#----------------------------------------------------------------------------- - -set(MITK_DEPENDS) -set(proj_DEPENDENCIES) -set(proj MITK) - -if(NOT MITK_DIR) - - #----------------------------------------------------------------------------- - # Create CMake options to customize the MITK build - #----------------------------------------------------------------------------- - - option(MITK_USE_SUPERBUILD "Use superbuild for MITK" ON) - option(MITK_USE_BLUEBERRY "Build the BlueBerry platform in MITK" ON) - option(MITK_BUILD_EXAMPLES "Build the MITK examples" OFF) - option(MITK_BUILD_ALL_PLUGINS "Build all MITK plugins" OFF) - option(MITK_BUILD_TESTING "Build the MITK unit tests" OFF) - option(MITK_USE_ACVD "Use Approximated Centroidal Voronoi Diagrams" OFF) - option(MITK_USE_CTK "Use CTK in MITK" ${MITK_USE_BLUEBERRY}) - option(MITK_USE_DCMTK "Use DCMTK in MITK" ON) - option(MITK_USE_Qt5 "Use Qt 5 library in MITK" ON) - option(MITK_USE_DCMQI "Use dcmqi in MITK" OFF) - option(MITK_USE_OpenCV "Use Intel's OpenCV library" OFF) - option(MITK_USE_Python3 "Enable Python wrapping in MITK" OFF) - - if(MITK_USE_BLUEBERRY AND NOT MITK_USE_CTK) - message("Forcing MITK_USE_CTK to ON because of MITK_USE_BLUEBERRY") - set(MITK_USE_CTK ON CACHE BOOL "Use CTK in MITK" FORCE) - endif() - - if(MITK_USE_CTK AND NOT MITK_USE_Qt5) - message("Forcing MITK_USE_Qt5 to ON because of MITK_USE_CTK") - set(MITK_USE_Qt5 ON CACHE BOOL "Use Qt 5 library in MITK" FORCE) - endif() - - set(MITK_USE_CableSwig ${MITK_USE_Python3}) - set(MITK_USE_GDCM 1) - set(MITK_USE_ITK 1) - set(MITK_USE_VTK 1) - - mark_as_advanced(MITK_USE_SUPERBUILD - MITK_BUILD_ALL_PLUGINS - MITK_BUILD_TESTING - ) - - set(mitk_cmake_boolean_args - MITK_USE_SUPERBUILD - MITK_USE_BLUEBERRY - MITK_BUILD_EXAMPLES - MITK_BUILD_ALL_PLUGINS - MITK_USE_ACVD - MITK_USE_CTK - MITK_USE_DCMTK - MITK_USE_Qt5 - MITK_USE_DCMQI - MITK_USE_OpenCV - MITK_USE_Python3 - ) - - if(MITK_USE_Qt5) - # Look for Qt at the superbuild level, to catch missing Qt libs early - find_package(Qt5Widgets REQUIRED) - endif() - - set(additional_mitk_cmakevars ) - - # Configure the set of default pixel types - set(MITK_ACCESSBYITK_INTEGRAL_PIXEL_TYPES - "int, unsigned int, short, unsigned short, char, unsigned char" - CACHE STRING "List of integral pixel types used in AccessByItk and InstantiateAccessFunction macros") - - set(MITK_ACCESSBYITK_FLOATING_PIXEL_TYPES - "double, float" - CACHE STRING "List of floating pixel types used in AccessByItk and InstantiateAccessFunction macros") - - set(MITK_ACCESSBYITK_COMPOSITE_PIXEL_TYPES - "" - CACHE STRING "List of composite pixel types used in AccessByItk and InstantiateAccessFunction macros") - - set(MITK_ACCESSBYITK_DIMENSIONS - "2,3" - CACHE STRING "List of dimensions used in AccessByItk and InstantiateAccessFunction macros") - - foreach(_arg MITK_ACCESSBYITK_INTEGRAL_PIXEL_TYPES MITK_ACCESSBYITK_FLOATING_PIXEL_TYPES - MITK_ACCESSBYITK_COMPOSITE_PIXEL_TYPES MITK_ACCESSBYITK_DIMENSIONS) - mark_as_advanced(${_arg}) - list(APPEND additional_mitk_cmakevars "-D${_arg}:STRING=${${_arg}}") - endforeach() - - #----------------------------------------------------------------------------- - # Create options to inject pre-build dependencies - #----------------------------------------------------------------------------- - - foreach(proj CTK DCMTK DCMQI GDCM VTK ACVD ITK OpenCV CableSwig) - if(MITK_USE_${proj}) - set(MITK_${proj}_DIR "${${proj}_DIR}" CACHE PATH "Path to ${proj} build directory") - mark_as_advanced(MITK_${proj}_DIR) - if(MITK_${proj}_DIR) - list(APPEND additional_mitk_cmakevars "-D${proj}_DIR:PATH=${MITK_${proj}_DIR}") - endif() - endif() - endforeach() - - set(MITK_BOOST_ROOT "${BOOST_ROOT}" CACHE PATH "Path to Boost directory") - mark_as_advanced(MITK_BOOST_ROOT) - if(MITK_BOOST_ROOT) - list(APPEND additional_mitk_cmakevars "-DBOOST_ROOT:PATH=${MITK_BOOST_ROOT}") - endif() - - set(MITK_SOURCE_DIR "" CACHE PATH "MITK source code location. If empty, MITK will be cloned from MITK_GIT_REPOSITORY") - set(MITK_GIT_REPOSITORY "https://phabricator.mitk.org/source/mitk.git" CACHE STRING "The git repository for cloning MITK") - set(MITK_GIT_TAG "origin/master" CACHE STRING "The git tag/hash to be used when cloning from MITK_GIT_REPOSITORY") - mark_as_advanced(MITK_SOURCE_DIR MITK_GIT_REPOSITORY MITK_GIT_TAG) - - #----------------------------------------------------------------------------- - # Create the final variable containing superbuild boolean args - #----------------------------------------------------------------------------- - - set(mitk_boolean_args) - foreach(mitk_cmake_arg ${mitk_cmake_boolean_args}) - list(APPEND mitk_boolean_args -D${mitk_cmake_arg}:BOOL=${${mitk_cmake_arg}}) - endforeach() - - #----------------------------------------------------------------------------- - # Additional MITK CMake variables - #----------------------------------------------------------------------------- - - if(MITK_USE_Qt5) - list(APPEND additional_mitk_cmakevars "-DCMAKE_PREFIX_PATH:PATH=${CMAKE_PREFIX_PATH}") - endif() - - if(MITK_USE_CTK) - list(APPEND additional_mitk_cmakevars "-DGIT_EXECUTABLE:FILEPATH=${GIT_EXECUTABLE}") - endif() - - if(MITK_INITIAL_CACHE_FILE) - list(APPEND additional_mitk_cmakevars "-DMITK_INITIAL_CACHE_FILE:INTERNAL=${MITK_INITIAL_CACHE_FILE}") - endif() - - if(MITK_USE_SUPERBUILD) - set(MITK_BINARY_DIR ${proj}-superbuild) - else() - set(MITK_BINARY_DIR ${proj}-build) - endif() - - set(proj_DEPENDENCIES) - set(MITK_DEPENDS ${proj}) - - # Configure the MITK souce code location - - if(NOT MITK_SOURCE_DIR) - set(mitk_source_location - SOURCE_DIR ${CMAKE_BINARY_DIR}/${proj} - GIT_REPOSITORY ${MITK_GIT_REPOSITORY} - GIT_TAG ${MITK_GIT_TAG} - ) - else() - set(mitk_source_location - SOURCE_DIR ${MITK_SOURCE_DIR} - ) - endif() - - ExternalProject_Add(${proj} - ${mitk_source_location} - BINARY_DIR ${MITK_BINARY_DIR} - PREFIX ${proj}${ep_suffix} - INSTALL_COMMAND "" - CMAKE_GENERATOR ${gen} - CMAKE_ARGS - ${ep_common_args} - ${mitk_boolean_args} - ${additional_mitk_cmakevars} - -DBUILD_SHARED_LIBS:BOOL=ON - -DBUILD_TESTING:BOOL=${MITK_BUILD_TESTING} - CMAKE_CACHE_ARGS - ${ep_common_cache_args} - CMAKE_CACHE_DEFAULT_ARGS - ${ep_common_cache_default_args} - DEPENDS - ${proj_DEPENDENCIES} - ) - - if(MITK_USE_SUPERBUILD) - set(MITK_DIR "${CMAKE_CURRENT_BINARY_DIR}/${MITK_BINARY_DIR}/MITK-build") - else() - set(MITK_DIR "${CMAKE_CURRENT_BINARY_DIR}/${MITK_BINARY_DIR}") - endif() - -else() - - # The project is provided using MITK_DIR, nevertheless since other - # projects may depend on MITK, let's add an 'empty' one - MacroEmptyExternalProject(${proj} "${proj_DEPENDENCIES}") - - # Further, do some sanity checks in the case of a pre-built MITK - set(my_itk_dir ${ITK_DIR}) - set(my_vtk_dir ${VTK_DIR}) - - find_package(MITK REQUIRED) - - if(my_itk_dir AND NOT my_itk_dir STREQUAL ${ITK_DIR}) - message(FATAL_ERROR "ITK packages do not match:\n ${MY_PROJECT_NAME}: ${my_itk_dir}\n MITK: ${ITK_DIR}") - endif() - - if(my_vtk_dir AND NOT my_vtk_dir STREQUAL ${VTK_DIR}) - message(FATAL_ERROR "VTK packages do not match:\n ${MY_PROJECT_NAME}: ${my_vtk_dir}\n MITK: ${VTK_DIR}") - endif() - -endif() diff --git a/Applications/PluginGenerator/ProjectTemplate/CMakeLists.txt b/Applications/PluginGenerator/ProjectTemplate/CMakeLists.txt deleted file mode 100644 index 162805f0d2..0000000000 --- a/Applications/PluginGenerator/ProjectTemplate/CMakeLists.txt +++ /dev/null @@ -1,325 +0,0 @@ -cmake_minimum_required(VERSION 3.18 FATAL_ERROR) - -# Change project and application name to your own -set(MY_PROJECT_NAME $(project-name)) -set(MY_APP_NAME $(project-app-name)) - -#----------------------------------------------------------------------------- -# Set the language standard (MITK requires C++17) -#----------------------------------------------------------------------------- - -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED 1) -set(CMAKE_CXX_EXTENSIONS 0) - -#----------------------------------------------------------------------------- -# Set a default build type if none was specified -#----------------------------------------------------------------------------- - -if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - message(STATUS "Setting build type to 'Debug' as none was specified.") - set(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build." FORCE) - - # Set the possible values of build type for cmake-gui - set_property(CACHE CMAKE_BUILD_TYPE PROPERTY - STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") -endif() - -#----------------------------------------------------------------------------- -# Superbuild Option - Enabled by default -#----------------------------------------------------------------------------- - -option(${MY_PROJECT_NAME}_USE_SUPERBUILD "Build ${MY_PROJECT_NAME} and the projects it depends on via SuperBuild.cmake." ON) - -if(${MY_PROJECT_NAME}_USE_SUPERBUILD) - project(${MY_PROJECT_NAME}-superbuild) - set(${MY_PROJECT_NAME}_SOURCE_DIR ${PROJECT_SOURCE_DIR}) - set(${MY_PROJECT_NAME}_BINARY_DIR ${PROJECT_BINARY_DIR}) -else() - project(${MY_PROJECT_NAME}) -endif() - -set(project_policies - CMP0001 # NEW: CMAKE_BACKWARDS_COMPATIBILITY should no longer be used. - CMP0002 # NEW: Logical target names must be globally unique. - CMP0003 # NEW: Libraries linked via full path no longer produce linker search paths. - CMP0004 # NEW: Libraries linked may NOT have leading or trailing whitespace. - CMP0005 # NEW: Preprocessor definition values are now escaped automatically. - CMP0006 # NEW: Installing MACOSX_BUNDLE targets requires a BUNDLE DESTINATION. - CMP0007 # NEW: List command no longer ignores empty elements. - CMP0008 # NEW: Libraries linked by full-path must have a valid library file name. - CMP0009 # NEW: FILE GLOB_RECURSE calls should not follow symlinks by default. - CMP0010 # NEW: Bad variable reference syntax is an error. - CMP0011 # NEW: Included scripts do automatic cmake_policy PUSH and POP. - CMP0012 # NEW: if() recognizes numbers and boolean constants. - CMP0013 # NEW: Duplicate binary directories are not allowed. - CMP0014 # NEW: Input directories must have CMakeLists.txt - CMP0020 # NEW: Automatically link Qt executables to qtmain target on Windows. - CMP0028 # NEW: Double colon in target name means ALIAS or IMPORTED target. - ) -foreach(policy ${project_policies}) - if(POLICY ${policy}) - cmake_policy(SET ${policy} NEW) - endif() -endforeach() - -#----------------------------------------------------------------------------- -# Update CMake module path -#------------------------------------------------------------------------------ - -set(CMAKE_MODULE_PATH - ${${MY_PROJECT_NAME}_SOURCE_DIR}/CMake - ${CMAKE_MODULE_PATH} - ) - -#----------------------------------------------------------------------------- -# CMake Function(s) and Macro(s) -#----------------------------------------------------------------------------- - -include(CTest) -include(MacroEmptyExternalProject) - -#----------------------------------------------------------------------------- -# Output directories. -#----------------------------------------------------------------------------- - -foreach(type LIBRARY RUNTIME ARCHIVE) - set(output_dir ${${MY_PROJECT_NAME}_BINARY_DIR}/bin) - set(CMAKE_${type}_OUTPUT_DIRECTORY ${output_dir} CACHE INTERNAL "Single output directory for building all libraries.") - mark_as_advanced(CMAKE_${type}_OUTPUT_DIRECTORY) -endforeach() - -#----------------------------------------------------------------------------- -# Additional Options (also shown during superbuild) -#----------------------------------------------------------------------------- - -option(BUILD_SHARED_LIBS "Build ${MY_PROJECT_NAME} with shared libraries" ON) -option(WITH_COVERAGE "Enable/Disable coverage" OFF) -option(BUILD_TESTING "Test the project" ON) - -option(${MY_PROJECT_NAME}_BUILD_ALL_PLUGINS "Build all ${MY_PROJECT_NAME} plugins" OFF) - -mark_as_advanced(${MY_PROJECT_NAME}_INSTALL_RPATH_RELATIVE - ${MY_PROJECT_NAME}_BUILD_ALL_PLUGINS - ) - -#----------------------------------------------------------------------------- -# Superbuild script -#----------------------------------------------------------------------------- - -if(${MY_PROJECT_NAME}_USE_SUPERBUILD) - include("${CMAKE_CURRENT_SOURCE_DIR}/SuperBuild.cmake") - return() -endif() - -#***************************************************************************** -#**************************** END OF SUPERBUILD **************************** -#***************************************************************************** - -#----------------------------------------------------------------------------- -# Prerequesites -#----------------------------------------------------------------------------- - -set(${PROJECT_NAME}_MODULES_PACKAGE_DEPENDS_DIR "${PROJECT_SOURCE_DIR}/CMake/PackageDepends") -set(MODULES_PACKAGE_DEPENDS_DIRS ${${PROJECT_NAME}_MODULES_PACKAGE_DEPENDS_DIR}) - -find_package(MITK 2018.04.99 REQUIRED) - -if(COMMAND mitkFunctionCheckMitkCompatibility) - mitkFunctionCheckMitkCompatibility(VERSIONS MITK_VERSION_PLUGIN_SYSTEM 1 REQUIRED) -else() - message(SEND_ERROR "Your MITK version is too old. Please use Git hash b86bf28 or newer") -endif() - -link_directories(${MITK_LINK_DIRECTORIES}) - -#----------------------------------------------------------------------------- -# CMake Function(s) and Macro(s) -#----------------------------------------------------------------------------- - -set(CMAKE_MODULE_PATH - ${MITK_SOURCE_DIR}/CMake - ${CMAKE_MODULE_PATH} - ) - -include(mitkFunctionCheckCompilerFlags) -include(mitkFunctionGetGccVersion) -include(mitkFunctionGetVersion) - -#----------------------------------------------------------------------------- -# Set project specific options and variables (NOT available during superbuild) -#----------------------------------------------------------------------------- - -set(${PROJECT_NAME}_VERSION_MAJOR "0") -set(${PROJECT_NAME}_VERSION_MINOR "1") -set(${PROJECT_NAME}_VERSION_PATCH "1") -set(${PROJECT_NAME}_VERSION_STRING "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}.${${PROJECT_NAME}_VERSION_PATCH}") - -# Ask the user if a console window should be shown with the applications -option(${PROJECT_NAME}_SHOW_CONSOLE_WINDOW "Use this to enable or disable the console window when starting GUI Applications" ON) -mark_as_advanced(${PROJECT_NAME}_SHOW_CONSOLE_WINDOW) - -if(NOT UNIX) - set(MITK_WIN32_FORCE_STATIC "STATIC") -endif() - -#----------------------------------------------------------------------------- -# Get project version info -#----------------------------------------------------------------------------- - -mitkFunctionGetVersion(${PROJECT_SOURCE_DIR} ${PROJECT_NAME}) - -#----------------------------------------------------------------------------- -# Installation preparation -# -# These should be set before any MITK install macros are used -#----------------------------------------------------------------------------- - -# on macOS all CTK plugins get copied into every -# application bundle (.app directory) specified here -set(MACOSX_BUNDLE_NAMES) -if(APPLE) - list(APPEND MACOSX_BUNDLE_NAMES ${MY_APP_NAME}) -endif(APPLE) - -#----------------------------------------------------------------------------- -# Set symbol visibility Flags -#----------------------------------------------------------------------------- - -if(CMAKE_COMPILER_IS_GNUCXX) - # The MITK module build system does not yet support default hidden visibility - set(VISIBILITY_CXX_FLAGS ) # "-fvisibility=hidden -fvisibility-inlines-hidden") -endif() - -#----------------------------------------------------------------------------- -# Set coverage Flags -#----------------------------------------------------------------------------- - -if(WITH_COVERAGE) - if(CMAKE_COMPILER_IS_GNUCXX) - set(coverage_flags "-g -fprofile-arcs -ftest-coverage -O0 -DNDEBUG") - set(COVERAGE_CXX_FLAGS ${coverage_flags}) - set(COVERAGE_C_FLAGS ${coverage_flags}) - endif() -endif() - -#----------------------------------------------------------------------------- -# Project C/CXX Flags -#----------------------------------------------------------------------------- - -set(${PROJECT_NAME}_C_FLAGS "${MITK_C_FLAGS} ${COVERAGE_C_FLAGS}") -set(${PROJECT_NAME}_C_FLAGS_DEBUG ${MITK_C_FLAGS_DEBUG}) -set(${PROJECT_NAME}_C_FLAGS_RELEASE ${MITK_C_FLAGS_RELEASE}) -set(${PROJECT_NAME}_CXX_FLAGS "${MITK_CXX_FLAGS} ${VISIBILITY_CXX_FLAGS} ${COVERAGE_CXX_FLAGS}") -set(${PROJECT_NAME}_CXX_FLAGS_DEBUG ${MITK_CXX_FLAGS_DEBUG}) -set(${PROJECT_NAME}_CXX_FLAGS_RELEASE ${MITK_CXX_FLAGS_RELEASE}) - -set(${PROJECT_NAME}_EXE_LINKER_FLAGS ${MITK_EXE_LINKER_FLAGS}) -set(${PROJECT_NAME}_SHARED_LINKER_FLAGS ${MITK_SHARED_LINKER_FLAGS}) -set(${PROJECT_NAME}_MODULE_LINKER_FLAGS ${MITK_MODULE_LINKER_FLAGS}) - -#----------------------------------------------------------------------------- -# Set C/CXX Flags -#----------------------------------------------------------------------------- - -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${${PROJECT_NAME}_C_FLAGS}") -set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${${PROJECT_NAME}_C_FLAGS_DEBUG}") -set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${${PROJECT_NAME}_C_FLAGS_RELEASE}") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${${PROJECT_NAME}_CXX_FLAGS}") -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${${PROJECT_NAME}_CXX_FLAGS_DEBUG}") -set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${${PROJECT_NAME}_CXX_FLAGS_RELEASE}") - -set(CMAKE_EXE_LINKER_FLAGS ${${PROJECT_NAME}_EXE_LINKER_FLAGS}) -set(CMAKE_SHARED_LINKER_FLAGS ${${PROJECT_NAME}_SHARED_LINKER_FLAGS}) -set(CMAKE_MODULE_LINKER_FLAGS ${${PROJECT_NAME}_MODULE_LINKER_FLAGS}) - -#----------------------------------------------------------------------------- -# Testing -#----------------------------------------------------------------------------- - -if(BUILD_TESTING) - # Configuration for the CMake-generated test driver - set(CMAKE_TESTDRIVER_EXTRA_INCLUDES "#include ") - set(CMAKE_TESTDRIVER_BEFORE_TESTMAIN " - try - {") - set(CMAKE_TESTDRIVER_AFTER_TESTMAIN " - } - catch (const std::exception& e) - { - fprintf(stderr, \"%s\\n\", e.what()); - return EXIT_FAILURE; - } - catch (...) - { - printf(\"Exception caught in the test driver\\n\"); - return EXIT_FAILURE; - }") -endif() - -#----------------------------------------------------------------------------- -# ${MY_PROJECT_NAME}_SUPERBUILD_BINARY_DIR -#----------------------------------------------------------------------------- - -# If ${MY_PROJECT_NAME}_SUPERBUILD_BINARY_DIR isn't defined, it means this project is -# *NOT* build using Superbuild. In that specific case, ${MY_PROJECT_NAME}_SUPERBUILD_BINARY_DIR -# should default to PROJECT_BINARY_DIR -if(NOT DEFINED ${PROJECT_NAME}_SUPERBUILD_BINARY_DIR) - set(${PROJECT_NAME}_SUPERBUILD_BINARY_DIR ${PROJECT_BINARY_DIR}) -endif() - -#----------------------------------------------------------------------------- -# MITK modules -#----------------------------------------------------------------------------- - -#add_subdirectory(Modules) - -#----------------------------------------------------------------------------- -# CTK plugins -#----------------------------------------------------------------------------- - -# The CMake code in this section *must* be in the top-level CMakeLists.txt file - -macro(GetMyTargetLibraries all_target_libraries varname) - set(re_ctkplugin "^$(project-plugin-base)_[a-zA-Z0-9_]+$") - set(_tmp_list) - list(APPEND _tmp_list ${all_target_libraries}) - ctkMacroListFilter(_tmp_list re_ctkplugin OUTPUT_VARIABLE ${varname}) -endmacro() - -include(${CMAKE_CURRENT_SOURCE_DIR}/Plugins/Plugins.cmake) -ctkMacroSetupPlugins(${PROJECT_PLUGINS} - BUILD_OPTION_PREFIX ${MY_PROJECT_NAME}_ - BUILD_ALL ${${MY_PROJECT_NAME}_BUILD_ALL_PLUGINS}) - -#----------------------------------------------------------------------------- -# Add subdirectories -#----------------------------------------------------------------------------- - -add_subdirectory(Apps/$(project-app-name)) - -#----------------------------------------------------------------------------- -# Installation -#----------------------------------------------------------------------------- - -# set MITK cpack variables -include(mitkSetupCPack) - -# Customize CPack variables for this project -include(CPackSetup) - -list(APPEND CPACK_CREATE_DESKTOP_LINKS "${MY_APP_NAME}") - -configure_file(${MITK_SOURCE_DIR}/MITKCPackOptions.cmake.in - ${PROJECT_BINARY_DIR}/${PROJECT_NAME}CPackOptions.cmake @ONLY) -set(CPACK_PROJECT_CONFIG_FILE "${PROJECT_BINARY_DIR}/${PROJECT_NAME}CPackOptions.cmake") - -# include CPack model once all variables are set -include(CPack) - -# Additional installation rules -include(mitkInstallRules) - -#----------------------------------------------------------------------------- -# Last configuration steps -#----------------------------------------------------------------------------- diff --git a/Applications/PluginGenerator/ProjectTemplate/LICENSE b/Applications/PluginGenerator/ProjectTemplate/LICENSE deleted file mode 100644 index adf2b2d3e7..0000000000 --- a/Applications/PluginGenerator/ProjectTemplate/LICENSE +++ /dev/null @@ -1 +0,0 @@ -$(copyright) diff --git a/Applications/PluginGenerator/ProjectTemplate/Plugins/Plugins.cmake b/Applications/PluginGenerator/ProjectTemplate/Plugins/Plugins.cmake deleted file mode 100644 index b5b5fc1943..0000000000 --- a/Applications/PluginGenerator/ProjectTemplate/Plugins/Plugins.cmake +++ /dev/null @@ -1,3 +0,0 @@ -set(PROJECT_PLUGINS - $(project-plugins) -) diff --git a/Applications/PluginGenerator/ProjectTemplate/SuperBuild.cmake b/Applications/PluginGenerator/ProjectTemplate/SuperBuild.cmake deleted file mode 100644 index 27398deae3..0000000000 --- a/Applications/PluginGenerator/ProjectTemplate/SuperBuild.cmake +++ /dev/null @@ -1,228 +0,0 @@ - -#----------------------------------------------------------------------------- -# ExternalProjects -#----------------------------------------------------------------------------- - -set(external_projects - MITK - ) - -set(EXTERNAL_MITK_DIR "${MITK_DIR}" CACHE PATH "Path to MITK build directory") -mark_as_advanced(EXTERNAL_MITK_DIR) -if(EXTERNAL_MITK_DIR) - set(MITK_DIR ${EXTERNAL_MITK_DIR}) -endif() - -find_package(Git REQUIRED) - -#----------------------------------------------------------------------------- -# External project settings -#----------------------------------------------------------------------------- - -include(ExternalProject) - -set(ep_base "${CMAKE_BINARY_DIR}/CMakeExternals") -set_property(DIRECTORY PROPERTY EP_BASE ${ep_base}) - -set(ep_install_dir "${CMAKE_BINARY_DIR}/CMakeExternals/Install") -set(ep_suffix "-cmake") -set(ep_build_shared_libs ON) -set(ep_build_testing OFF) - -# Compute -G arg for configuring external projects with the same CMake generator: -if(CMAKE_EXTRA_GENERATOR) - set(gen "${CMAKE_EXTRA_GENERATOR} - ${CMAKE_GENERATOR}") -else() - set(gen "${CMAKE_GENERATOR}") -endif() - -# Use this value where semi-colons are needed in ep_add args: -set(sep "^^") - -## - -if(MSVC_VERSION) - set(ep_common_C_FLAGS "${CMAKE_C_FLAGS} /bigobj /MP") - set(ep_common_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj /MP") -endif() - -set(ep_common_args - -DBUILD_TESTING:BOOL=${ep_build_testing} - -DCMAKE_INSTALL_PREFIX:PATH=${ep_install_dir} - -DBUILD_SHARED_LIBS:BOOL=${ep_build_shared_libs} - -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} - -DCMAKE_C_COMPILER:FILEPATH=${CMAKE_C_COMPILER} - -DCMAKE_CXX_COMPILER:FILEPATH=${CMAKE_CXX_COMPILER} - -DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS} - -DCMAKE_CXX_FLAGS:STRING=${CMAKE_CXX_FLAGS} - # debug flags - -DCMAKE_CXX_FLAGS_DEBUG:STRING=${CMAKE_CXX_FLAGS_DEBUG} - -DCMAKE_C_FLAGS_DEBUG:STRING=${CMAKE_C_FLAGS_DEBUG} - # release flags - -DCMAKE_CXX_FLAGS_RELEASE:STRING=${CMAKE_CXX_FLAGS_RELEASE} - -DCMAKE_C_FLAGS_RELEASE:STRING=${CMAKE_C_FLAGS_RELEASE} - # relwithdebinfo - -DCMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=${CMAKE_CXX_FLAGS_RELWITHDEBINFO} - -DCMAKE_C_FLAGS_RELWITHDEBINFO:STRING=${CMAKE_C_FLAGS_RELWITHDEBINFO} - # link flags - -DCMAKE_EXE_LINKER_FLAGS:STRING=${CMAKE_EXE_LINKER_FLAGS} - -DCMAKE_SHARED_LINKER_FLAGS:STRING=${CMAKE_SHARED_LINKER_FLAGS} - -DCMAKE_MODULE_LINKER_FLAGS:STRING=${CMAKE_MODULE_LINKER_FLAGS} -) - -set(ep_common_cache_args -) - -set(ep_common_cache_default_args - "-DCMAKE_PREFIX_PATH:PATH=${CMAKE_PREFIX_PATH}" - "-DCMAKE_INCLUDE_PATH:PATH=${CMAKE_INCLUDE_PATH}" - "-DCMAKE_LIBRARY_PATH:PATH=${CMAKE_LIBRARY_PATH}" -) - -# Include external projects -foreach(p ${external_projects}) - include(CMakeExternals/${p}.cmake) -endforeach() - -#----------------------------------------------------------------------------- -# Set superbuild boolean args -#----------------------------------------------------------------------------- - -set(my_cmake_boolean_args - WITH_COVERAGE - BUILD_TESTING - ${MY_PROJECT_NAME}_BUILD_ALL_PLUGINS - ) - -#----------------------------------------------------------------------------- -# Create the final variable containing superbuild boolean args -#----------------------------------------------------------------------------- - -set(my_superbuild_boolean_args) -foreach(my_cmake_arg ${my_cmake_boolean_args}) - list(APPEND my_superbuild_boolean_args -D${my_cmake_arg}:BOOL=${${my_cmake_arg}}) -endforeach() - -#----------------------------------------------------------------------------- -# Project Utilities -#----------------------------------------------------------------------------- - -set(proj ${MY_PROJECT_NAME}-Utilities) -ExternalProject_Add(${proj} - DOWNLOAD_COMMAND "" - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - DEPENDS - # Mandatory dependencies - ${MITK_DEPENDS} - # Optional dependencies -) - -#----------------------------------------------------------------------------- -# Additional Project CXX/C Flags -#----------------------------------------------------------------------------- - -set(${MY_PROJECT_NAME}_ADDITIONAL_C_FLAGS "" CACHE STRING "Additional C Flags for ${MY_PROJECT_NAME}") -set(${MY_PROJECT_NAME}_ADDITIONAL_C_FLAGS_RELEASE "" CACHE STRING "Additional Release C Flags for ${MY_PROJECT_NAME}") -set(${MY_PROJECT_NAME}_ADDITIONAL_C_FLAGS_DEBUG "" CACHE STRING "Additional Debug C Flags for ${MY_PROJECT_NAME}") -mark_as_advanced(${MY_PROJECT_NAME}_ADDITIONAL_C_FLAGS ${MY_PROJECT_NAME}_ADDITIONAL_C_FLAGS_DEBUG ${MY_PROJECT_NAME}_ADDITIONAL_C_FLAGS_RELEASE) - -set(${MY_PROJECT_NAME}_ADDITIONAL_CXX_FLAGS "" CACHE STRING "Additional CXX Flags for ${MY_PROJECT_NAME}") -set(${MY_PROJECT_NAME}_ADDITIONAL_CXX_FLAGS_RELEASE "" CACHE STRING "Additional Release CXX Flags for ${MY_PROJECT_NAME}") -set(${MY_PROJECT_NAME}_ADDITIONAL_CXX_FLAGS_DEBUG "" CACHE STRING "Additional Debug CXX Flags for ${MY_PROJECT_NAME}") -mark_as_advanced(${MY_PROJECT_NAME}_ADDITIONAL_CXX_FLAGS ${MY_PROJECT_NAME}_ADDITIONAL_CXX_FLAGS_DEBUG ${MY_PROJECT_NAME}_ADDITIONAL_CXX_FLAGS_RELEASE) - -set(${MY_PROJECT_NAME}_ADDITIONAL_EXE_LINKER_FLAGS "" CACHE STRING "Additional exe linker flags for ${MY_PROJECT_NAME}") -set(${MY_PROJECT_NAME}_ADDITIONAL_SHARED_LINKER_FLAGS "" CACHE STRING "Additional shared linker flags for ${MY_PROJECT_NAME}") -set(${MY_PROJECT_NAME}_ADDITIONAL_MODULE_LINKER_FLAGS "" CACHE STRING "Additional module linker flags for ${MY_PROJECT_NAME}") -mark_as_advanced(${MY_PROJECT_NAME}_ADDITIONAL_EXE_LINKER_FLAGS ${MY_PROJECT_NAME}_ADDITIONAL_SHARED_LINKER_FLAGS ${MY_PROJECT_NAME}_ADDITIONAL_MODULE_LINKER_FLAGS) - -#----------------------------------------------------------------------------- -# Project Configure -#----------------------------------------------------------------------------- - -set(proj ${MY_PROJECT_NAME}-Configure) - -ExternalProject_Add(${proj} - DOWNLOAD_COMMAND "" - CMAKE_GENERATOR ${gen} - CMAKE_CACHE_ARGS - # --------------- Build options ---------------- - -DBUILD_TESTING:BOOL=${ep_build_testing} - -DCMAKE_INSTALL_PREFIX:PATH=${ep_install_dir} - -DBUILD_SHARED_LIBS:BOOL=${ep_build_shared_libs} - -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} - "-DCMAKE_PREFIX_PATH:PATH=${CMAKE_PREFIX_PATH}" - "-DCMAKE_INCLUDE_PATH:PATH=${CMAKE_INCLUDE_PATH}" - "-DCMAKE_LIBRARY_PATH:PATH=${CMAKE_LIBRARY_PATH}" - # --------------- Compile options ---------------- - -DCMAKE_C_COMPILER:FILEPATH=${CMAKE_C_COMPILER} - -DCMAKE_CXX_COMPILER:FILEPATH=${CMAKE_CXX_COMPILER} - "-DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS} ${${MY_PROJECT_NAME}_ADDITIONAL_C_FLAGS}" - "-DCMAKE_CXX_FLAGS:STRING=${CMAKE_CXX_FLAGS} ${${MY_PROJECT_NAME}_ADDITIONAL_CXX_FLAGS}" - # debug flags - "-DCMAKE_CXX_FLAGS_DEBUG:STRING=${CMAKE_CXX_FLAGS_DEBUG} ${${MY_PROJECT_NAME}_ADDITIONAL_CXX_FLAGS_DEBUG}" - "-DCMAKE_C_FLAGS_DEBUG:STRING=${CMAKE_C_FLAGS_DEBUG} ${${MY_PROJECT_NAME}_ADDITIONAL_C_FLAGS_DEBUG}" - # release flags - "-DCMAKE_CXX_FLAGS_RELEASE:STRING=${CMAKE_CXX_FLAGS_RELEASE} ${${MY_PROJECT_NAME}_ADDITIONAL_CXX_FLAGS_RELEASE}" - "-DCMAKE_C_FLAGS_RELEASE:STRING=${CMAKE_C_FLAGS_RELEASE} ${${MY_PROJECT_NAME}_ADDITIONAL_C_FLAGS_RELEASE}" - # relwithdebinfo - -DCMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=${CMAKE_CXX_FLAGS_RELWITHDEBINFO} - -DCMAKE_C_FLAGS_RELWITHDEBINFO:STRING=${CMAKE_C_FLAGS_RELWITHDEBINFO} - # link flags - "-DCMAKE_EXE_LINKER_FLAGS:STRING=${CMAKE_EXE_LINKER_FLAGS} ${${MY_PROJECT_NAME}_ADDITIONAL_EXE_LINKER_FLAGS}" - "-DCMAKE_SHARED_LINKER_FLAGS:STRING=${CMAKE_SHARED_LINKER_FLAGS} ${${MY_PROJECT_NAME}_ADDITIONAL_SHARED_LINKER_FLAGS}" - "-DCMAKE_MODULE_LINKER_FLAGS:STRING=${CMAKE_MODULE_LINKER_FLAGS} ${${MY_PROJECT_NAME}_ADDITIONAL_MODULE_LINKER_FLAGS}" - # ------------- Boolean build options -------------- - ${my_superbuild_boolean_args} - -D${MY_PROJECT_NAME}_USE_SUPERBUILD:BOOL=OFF - -D${MY_PROJECT_NAME}_CONFIGURED_VIA_SUPERBUILD:BOOL=ON - -DCTEST_USE_LAUNCHERS:BOOL=${CTEST_USE_LAUNCHERS} - # ----------------- Miscellaneous --------------- - -D${MY_PROJECT_NAME}_SUPERBUILD_BINARY_DIR:PATH=${PROJECT_BINARY_DIR} - -DMITK_DIR:PATH=${MITK_DIR} - -DITK_DIR:PATH=${ITK_DIR} - -DVTK_DIR:PATH=${VTK_DIR} - - SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} - BINARY_DIR ${CMAKE_BINARY_DIR}/${MY_PROJECT_NAME}-build - BUILD_COMMAND "" - INSTALL_COMMAND "" - DEPENDS - ${MY_PROJECT_NAME}-Utilities - ) - - -#----------------------------------------------------------------------------- -# Project -#----------------------------------------------------------------------------- - -if(CMAKE_GENERATOR MATCHES ".*Makefiles.*") - set(_build_cmd "$(MAKE)") -else() - set(_build_cmd ${CMAKE_COMMAND} --build ${CMAKE_CURRENT_BINARY_DIR}/${MY_PROJECT_NAME}-build --config ${CMAKE_CFG_INTDIR}) -endif() - -# The variable SUPERBUILD_EXCLUDE_${MY_PROJECT_NAME}BUILD_TARGET should be set when submitting to a dashboard -if(NOT DEFINED SUPERBUILD_EXCLUDE_${MY_PROJECT_NAME}BUILD_TARGET OR NOT SUPERBUILD_EXCLUDE_${MY_PROJECT_NAME}BUILD_TARGET) - set(_target_all_option "ALL") -else() - set(_target_all_option "") -endif() - -add_custom_target(${MY_PROJECT_NAME}-build ${_target_all_option} - COMMAND ${_build_cmd} - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${MY_PROJECT_NAME}-build - DEPENDS ${MY_PROJECT_NAME}-Configure - ) - -#----------------------------------------------------------------------------- -# Custom target allowing to drive the build of the project itself -#----------------------------------------------------------------------------- - -add_custom_target(${MY_PROJECT_NAME} - COMMAND ${_build_cmd} - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${MY_PROJECT_NAME}-build -) - diff --git a/Applications/PluginGenerator/SetupPackaging.cmake b/Applications/PluginGenerator/SetupPackaging.cmake deleted file mode 100644 index 9a9830df68..0000000000 --- a/Applications/PluginGenerator/SetupPackaging.cmake +++ /dev/null @@ -1,53 +0,0 @@ -#----------------------------------------------------------------------------- -# Installation -#----------------------------------------------------------------------------- - -install(TARGETS ${exec_target} DESTINATION .) - -install(FILES "${PROJECT_SOURCE_DIR}/Changelog.txt" DESTINATION .) - -install(CODE " - set(DIRS - ${QT_LIBRARY_DIR} - ${QT_LIBRARY_DIR}/../bin - ${CTK_LIBRARY_DIRS} - ) - - include(BundleUtilities) - set(BU_CHMOD_BUNDLE_ITEMS ON) - - fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/${exec_target}${CMAKE_EXECUTABLE_SUFFIX}\" \"\" \"\${DIRS}\") -") - -#----------------------------------------------------------------------------- -# Packaging -#----------------------------------------------------------------------------- - -# -# First, set the generator variable -# -if(WIN32) - set(CPACK_GENERATOR ZIP) -elseif(APPLE) - set(CPACK_GENERATOR DragNDrop) -else() - set(CPACK_GENERATOR TGZ) -endif() - -# include required mfc libraries -include(InstallRequiredSystemLibraries) - -set(CPACK_PACKAGE_NAME "MitkPluginGenerator") -set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MITK PluginGenerator bootstraps MITK-based projects") -set(CPACK_PACKAGE_VENDOR "German Cancer Research Center (DKFZ)") -set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") -set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") -set(CPACK_PACKAGE_VERSION_MAJOR "${VERSION_MAJOR}") -set(CPACK_PACKAGE_VERSION_MINOR "${VERSION_MINOR}") -set(CPACK_PACKAGE_VERSION_PATCH "${VERSION_PATCH}") - -# tell cpack to strip all debug symbols from all files -set(CPACK_STRIP_FILES ON) - -include(CPack) - diff --git a/Applications/PluginGenerator/ctkCommandLineParser.cpp b/Applications/PluginGenerator/ctkCommandLineParser.cpp deleted file mode 100644 index 52d3c45068..0000000000 --- a/Applications/PluginGenerator/ctkCommandLineParser.cpp +++ /dev/null @@ -1,874 +0,0 @@ -/*========================================================================= - - Library: CTK - - Copyright (c) Kitware Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0.txt - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -=========================================================================*/ - -// STL includes -#include - -// Qt includes -#include -#include -#include -#include -#include -#include - -// CTK includes -#include "ctkCommandLineParser.h" - -namespace -{ - // -------------------------------------------------------------------------- - class CommandLineParserArgumentDescription - { - public: - CommandLineParserArgumentDescription(const QString &longArg, - const QString &longArgPrefix, - const QString &shortArg, - const QString &shortArgPrefix, - QVariant::Type type, - const QString &argHelp, - const QVariant &defaultValue, - bool ignoreRest, - bool deprecated) - : LongArg(longArg), - LongArgPrefix(longArgPrefix), - ShortArg(shortArg), - ShortArgPrefix(shortArgPrefix), - ArgHelp(argHelp), - IgnoreRest(ignoreRest), - NumberOfParametersToProcess(0), - Deprecated(deprecated), - DefaultValue(defaultValue), - Value(type), - ValueType(type) - { - if (defaultValue.isValid()) - { - Value = defaultValue; - } - - switch (type) - { - case QVariant::String: - { - NumberOfParametersToProcess = 1; - RegularExpression = ".*"; - } - break; - case QVariant::Bool: - { - NumberOfParametersToProcess = 0; - RegularExpression = ""; - } - break; - case QVariant::StringList: - { - NumberOfParametersToProcess = -1; - RegularExpression = ".*"; - } - break; - case QVariant::Int: - { - NumberOfParametersToProcess = 1; - RegularExpression = "-?[0-9]+"; - ExactMatchFailedMessage = "A negative or positive integer is expected."; - } - break; - default: - ExactMatchFailedMessage = QString("Type %1 not supported.").arg(static_cast(type)); - } - } - - ~CommandLineParserArgumentDescription() {} - bool addParameter(const QString &value); - - QString helpText(int fieldWidth, const char charPad, const QString &settingsValue = ""); - - QString LongArg; - QString LongArgPrefix; - QString ShortArg; - QString ShortArgPrefix; - QString ArgHelp; - bool IgnoreRest; - int NumberOfParametersToProcess; - QString RegularExpression; - QString ExactMatchFailedMessage; - bool Deprecated; - - QVariant DefaultValue; - QVariant Value; - QVariant::Type ValueType; - }; - - // -------------------------------------------------------------------------- - bool CommandLineParserArgumentDescription::addParameter(const QString &value) - { - if (!RegularExpression.isEmpty()) - { - // Validate value - QRegExp regexp(this->RegularExpression); - if (!regexp.exactMatch(value)) - { - return false; - } - } - - switch (Value.type()) - { - case QVariant::String: - { - Value.setValue(value); - } - break; - case QVariant::Bool: - { - Value.setValue(!QString::compare(value, "true", Qt::CaseInsensitive)); - } - break; - case QVariant::StringList: - { - if (Value.isNull()) - { - QStringList list; - list << value; - Value.setValue(list); - } - else - { - QStringList list = Value.toStringList(); - list << value; - Value.setValue(list); - } - } - break; - case QVariant::Int: - { - Value.setValue(value.toInt()); - } - break; - default: - return false; - } - - return true; - } - - // -------------------------------------------------------------------------- - QString CommandLineParserArgumentDescription::helpText(int fieldWidth, - const char charPad, - const QString &settingsValue) - { - QString text; - QTextStream stream(&text); - stream.setFieldAlignment(QTextStream::AlignLeft); - stream.setPadChar(charPad); - - QString shortAndLongArg; - if (!this->ShortArg.isEmpty()) - { - shortAndLongArg += QString(" %1%2").arg(this->ShortArgPrefix).arg(this->ShortArg); - } - - if (!this->LongArg.isEmpty()) - { - if (this->ShortArg.isEmpty()) - { - shortAndLongArg.append(" "); - } - else - { - shortAndLongArg.append(", "); - } - - shortAndLongArg += QString("%1%2").arg(this->LongArgPrefix).arg(this->LongArg); - } - - if (!this->ArgHelp.isEmpty()) - { - stream.setFieldWidth(fieldWidth); - } - - stream << shortAndLongArg; - stream.setFieldWidth(0); - stream << this->ArgHelp; - if (!settingsValue.isNull()) - { - stream << " (default: " << settingsValue << ")"; - } - else if (!this->DefaultValue.isNull()) - { - stream << " (default: " << this->DefaultValue.toString() << ")"; - } - stream << "\n"; - return text; - } -} - -// -------------------------------------------------------------------------- -// ctkCommandLineParser::ctkInternal class - -// -------------------------------------------------------------------------- -class ctkCommandLineParser::ctkInternal -{ -public: - ctkInternal(QSettings *settings) - : Debug(false), FieldWidth(0), UseQSettings(false), Settings(settings), MergeSettings(true), StrictMode(false) - { - } - - ~ctkInternal() { qDeleteAll(ArgumentDescriptionList); } - CommandLineParserArgumentDescription *argumentDescription(const QString &argument); - - QList ArgumentDescriptionList; - QHash ArgNameToArgumentDescriptionMap; - QMap> GroupToArgumentDescriptionListMap; - - QStringList UnparsedArguments; - QStringList ProcessedArguments; - QString ErrorString; - bool Debug; - int FieldWidth; - QString LongPrefix; - QString ShortPrefix; - QString CurrentGroup; - bool UseQSettings; - QPointer Settings; - QString DisableQSettingsLongArg; - QString DisableQSettingsShortArg; - bool MergeSettings; - bool StrictMode; -}; - -// -------------------------------------------------------------------------- -// ctkCommandLineParser::ctkInternal methods - -// -------------------------------------------------------------------------- -CommandLineParserArgumentDescription *ctkCommandLineParser::ctkInternal::argumentDescription(const QString &argument) -{ - QString unprefixedArg = argument; - if (!LongPrefix.isEmpty() && argument.startsWith(LongPrefix)) - { - // Case when (ShortPrefix + UnPrefixedArgument) matches LongPrefix - if (argument == LongPrefix && !ShortPrefix.isEmpty() && argument.startsWith(ShortPrefix)) - { - unprefixedArg = argument.mid(ShortPrefix.length()); - } - else - { - unprefixedArg = argument.mid(LongPrefix.length()); - } - } - else if (!ShortPrefix.isEmpty() && argument.startsWith(ShortPrefix)) - { - unprefixedArg = argument.mid(ShortPrefix.length()); - } - else if (!LongPrefix.isEmpty() && !ShortPrefix.isEmpty()) - { - return nullptr; - } - - if (this->ArgNameToArgumentDescriptionMap.contains(unprefixedArg)) - { - return this->ArgNameToArgumentDescriptionMap[unprefixedArg]; - } - return nullptr; -} - -// -------------------------------------------------------------------------- -// ctkCommandLineParser methods - -// -------------------------------------------------------------------------- -ctkCommandLineParser::ctkCommandLineParser(QObject *newParent) : Superclass(newParent) -{ - this->Internal = new ctkInternal(nullptr); -} - -// -------------------------------------------------------------------------- -ctkCommandLineParser::ctkCommandLineParser(QSettings *settings, QObject *newParent) : Superclass(newParent) -{ - this->Internal = new ctkInternal(settings); -} - -// -------------------------------------------------------------------------- -ctkCommandLineParser::~ctkCommandLineParser() -{ - delete this->Internal; -} - -// -------------------------------------------------------------------------- -QHash ctkCommandLineParser::parseArguments(const QStringList &arguments, bool *ok) -{ - // Reset - this->Internal->UnparsedArguments.clear(); - this->Internal->ProcessedArguments.clear(); - this->Internal->ErrorString.clear(); - foreach (CommandLineParserArgumentDescription *desc, this->Internal->ArgumentDescriptionList) - { - desc->Value = QVariant(desc->ValueType); - if (desc->DefaultValue.isValid()) - { - desc->Value = desc->DefaultValue; - } - } - - bool error = false; - bool ignoreRest = false; - bool useSettings = this->Internal->UseQSettings; - CommandLineParserArgumentDescription *currentArgDesc = nullptr; - QList parsedArgDescriptions; - for (int i = 1; i < arguments.size(); ++i) - { - QString argument = arguments.at(i); - if (this->Internal->Debug) - { - qDebug() << "Processing" << argument; - } - - // should argument be ignored ? - if (ignoreRest) - { - if (this->Internal->Debug) - { - qDebug() << " Skipping: IgnoreRest flag was been set"; - } - this->Internal->UnparsedArguments << argument; - continue; - } - - // Skip if the argument does not start with the defined prefix - if (!(argument.startsWith(this->Internal->LongPrefix) || argument.startsWith(this->Internal->ShortPrefix))) - { - if (this->Internal->StrictMode) - { - this->Internal->ErrorString = QString("Unknown argument %1").arg(argument); - error = true; - break; - } - if (this->Internal->Debug) - { - qDebug() << " Skipping: It does not start with the defined prefix"; - } - this->Internal->UnparsedArguments << argument; - continue; - } - - // Skip if argument has already been parsed ... - if (this->Internal->ProcessedArguments.contains(argument)) - { - if (this->Internal->StrictMode) - { - this->Internal->ErrorString = QString("Argument %1 already processed !").arg(argument); - error = true; - break; - } - if (this->Internal->Debug) - { - qDebug() << " Skipping: Already processed !"; - } - continue; - } - - // Retrieve corresponding argument description - currentArgDesc = this->Internal->argumentDescription(argument); - - // Is there a corresponding argument description ? - if (currentArgDesc) - { - // If the argument is deprecated, print the help text but continue processing - if (currentArgDesc->Deprecated) - { - qWarning().nospace() << "Deprecated argument " << argument << ": " << currentArgDesc->ArgHelp; - } - else - { - parsedArgDescriptions.push_back(currentArgDesc); - } - - // Is the argument the special "disable QSettings" argument? - if ((!currentArgDesc->LongArg.isEmpty() && currentArgDesc->LongArg == this->Internal->DisableQSettingsLongArg) || - (!currentArgDesc->ShortArg.isEmpty() && currentArgDesc->ShortArg == this->Internal->DisableQSettingsShortArg)) - { - useSettings = false; - } - - this->Internal->ProcessedArguments << currentArgDesc->ShortArg << currentArgDesc->LongArg; - int numberOfParametersToProcess = currentArgDesc->NumberOfParametersToProcess; - ignoreRest = currentArgDesc->IgnoreRest; - if (this->Internal->Debug && ignoreRest) - { - qDebug() << " IgnoreRest flag is True"; - } - - // Is the number of parameters associated with the argument being processed known ? - if (numberOfParametersToProcess == 0) - { - currentArgDesc->addParameter("true"); - } - else if (numberOfParametersToProcess > 0) - { - QString missingParameterError = "Argument %1 has %2 value(s) associated whereas exacly %3 are expected."; - for (int j = 1; j <= numberOfParametersToProcess; ++j) - { - if (i + j >= arguments.size()) - { - this->Internal->ErrorString = - missingParameterError.arg(argument).arg(j - 1).arg(numberOfParametersToProcess); - if (this->Internal->Debug) - { - qDebug() << this->Internal->ErrorString; - } - if (ok) - { - *ok = false; - } - return QHash(); - } - QString parameter = arguments.at(i + j); - if (this->Internal->Debug) - { - qDebug() << " Processing parameter" << j << ", value:" << parameter; - } - if (this->argumentAdded(parameter)) - { - this->Internal->ErrorString = - missingParameterError.arg(argument).arg(j - 1).arg(numberOfParametersToProcess); - if (this->Internal->Debug) - { - qDebug() << this->Internal->ErrorString; - } - if (ok) - { - *ok = false; - } - return QHash(); - } - if (!currentArgDesc->addParameter(parameter)) - { - this->Internal->ErrorString = QString("Value(s) associated with argument %1 are incorrect. %2") - .arg(argument) - .arg(currentArgDesc->ExactMatchFailedMessage); - - if (this->Internal->Debug) - { - qDebug() << this->Internal->ErrorString; - } - if (ok) - { - *ok = false; - } - return QHash(); - } - } - // Update main loop increment - i = i + numberOfParametersToProcess; - } - else if (numberOfParametersToProcess == -1) - { - if (this->Internal->Debug) - { - qDebug() << " Proccessing StringList ..."; - } - int j = 1; - while (j + i < arguments.size()) - { - if (this->argumentAdded(arguments.at(j + i))) - { - if (this->Internal->Debug) - { - qDebug() << " No more parameter for" << argument; - } - break; - } - QString parameter = arguments.at(j + i); - if (this->Internal->Debug) - { - qDebug() << " Processing parameter" << j << ", value:" << parameter; - } - if (!currentArgDesc->addParameter(parameter)) - { - this->Internal->ErrorString = QString("Value(s) associated with argument %1 are incorrect. %2") - .arg(argument) - .arg(currentArgDesc->ExactMatchFailedMessage); - - if (this->Internal->Debug) - { - qDebug() << this->Internal->ErrorString; - } - if (ok) - { - *ok = false; - } - return QHash(); - } - j++; - } - // Update main loop increment - i = i + j; - } - } - else - { - if (this->Internal->StrictMode) - { - this->Internal->ErrorString = QString("Unknown argument %1").arg(argument); - error = true; - break; - } - if (this->Internal->Debug) - { - qDebug() << " Skipping: Unknown argument"; - } - this->Internal->UnparsedArguments << argument; - } - } - - if (ok) - { - *ok = !error; - } - - QSettings *settings = nullptr; - if (this->Internal->UseQSettings && useSettings) - { - if (this->Internal->Settings) - { - settings = this->Internal->Settings; - } - else - { - // Use a default constructed QSettings instance - settings = new QSettings(); - } - } - - QHash parsedArguments; - QListIterator it(this->Internal->ArgumentDescriptionList); - while (it.hasNext()) - { - QString key; - CommandLineParserArgumentDescription *desc = it.next(); - if (!desc->LongArg.isEmpty()) - { - key = desc->LongArg; - } - else - { - key = desc->ShortArg; - } - - if (parsedArgDescriptions.contains(desc)) - { - // The argument was supplied on the command line, so use the given value - - if (this->Internal->MergeSettings && settings) - { - // Merge with QSettings - QVariant settingsVal = settings->value(key); - - if (desc->ValueType == QVariant::StringList && settingsVal.canConvert(QVariant::StringList)) - { - QStringList stringList = desc->Value.toStringList(); - stringList.append(settingsVal.toStringList()); - parsedArguments.insert(key, stringList); - } - else - { - // do a normal insert - parsedArguments.insert(key, desc->Value); - } - } - else - { - // No merging, just insert all user values - parsedArguments.insert(key, desc->Value); - } - } - else - { - if (settings) - { - // If there is a valid QSettings entry for the argument, use the value - QVariant settingsVal = settings->value(key, desc->Value); - if (!settingsVal.isNull()) - { - parsedArguments.insert(key, settingsVal); - } - } - else - { - // Just insert the arguments with valid default values - if (!desc->Value.isNull()) - { - parsedArguments.insert(key, desc->Value); - } - } - } - } - - // If we created a default QSettings instance, delete it - if (settings && !this->Internal->Settings) - { - delete settings; - } - - return parsedArguments; -} - -// ------------------------------------------------------------------------- -QHash ctkCommandLineParser::parseArguments(int argc, char **argv, bool *ok) -{ - QStringList arguments; - - // Create a QStringList of arguments - for (int i = 0; i < argc; ++i) - { - arguments << argv[i]; - } - - return this->parseArguments(arguments, ok); -} - -// ------------------------------------------------------------------------- -QString ctkCommandLineParser::errorString() const -{ - return this->Internal->ErrorString; -} - -// ------------------------------------------------------------------------- -const QStringList &ctkCommandLineParser::unparsedArguments() const -{ - return this->Internal->UnparsedArguments; -} - -// -------------------------------------------------------------------------- -void ctkCommandLineParser::addArgument(const QString &longarg, - const QString &shortarg, - QVariant::Type type, - const QString &argHelp, - const QVariant &defaultValue, - bool ignoreRest, - bool deprecated) -{ - Q_ASSERT_X(!(longarg.isEmpty() && shortarg.isEmpty()), "addArgument", "both long and short argument names are empty"); - if (longarg.isEmpty() && shortarg.isEmpty()) - { - return; - } - - Q_ASSERT_X(!defaultValue.isValid() || defaultValue.type() == type, "addArgument", "defaultValue type does not match"); - if (defaultValue.isValid() && defaultValue.type() != type) - throw std::logic_error("The QVariant type of defaultValue does not match the specified type"); - - /* Make sure it's not already added */ - bool added = this->Internal->ArgNameToArgumentDescriptionMap.contains(longarg); - Q_ASSERT_X(!added, "addArgument", "long argument already added"); - if (added) - { - return; - } - - added = this->Internal->ArgNameToArgumentDescriptionMap.contains(shortarg); - Q_ASSERT_X(!added, "addArgument", "short argument already added"); - if (added) - { - return; - } - - auto argDesc = new CommandLineParserArgumentDescription(longarg, - this->Internal->LongPrefix, - shortarg, - this->Internal->ShortPrefix, - type, - argHelp, - defaultValue, - ignoreRest, - deprecated); - - int argWidth = 0; - if (!longarg.isEmpty()) - { - this->Internal->ArgNameToArgumentDescriptionMap[longarg] = argDesc; - argWidth += longarg.length() + this->Internal->LongPrefix.length(); - } - if (!shortarg.isEmpty()) - { - this->Internal->ArgNameToArgumentDescriptionMap[shortarg] = argDesc; - argWidth += shortarg.length() + this->Internal->ShortPrefix.length() + 2; - } - argWidth += 5; - - // Set the field width for the arguments - if (argWidth > this->Internal->FieldWidth) - { - this->Internal->FieldWidth = argWidth; - } - - this->Internal->ArgumentDescriptionList << argDesc; - this->Internal->GroupToArgumentDescriptionListMap[this->Internal->CurrentGroup] << argDesc; -} - -// -------------------------------------------------------------------------- -void ctkCommandLineParser::addDeprecatedArgument(const QString &longarg, - const QString &shortarg, - const QString &argHelp) -{ - addArgument(longarg, shortarg, QVariant::StringList, argHelp, QVariant(), false, true); -} - -// -------------------------------------------------------------------------- -bool ctkCommandLineParser::setExactMatchRegularExpression(const QString &argument, - const QString &expression, - const QString &exactMatchFailedMessage) -{ - CommandLineParserArgumentDescription *argDesc = this->Internal->argumentDescription(argument); - if (!argDesc) - { - return false; - } - - if (argDesc->Value.type() == QVariant::Bool) - { - return false; - } - argDesc->RegularExpression = expression; - argDesc->ExactMatchFailedMessage = exactMatchFailedMessage; - return true; -} - -// -------------------------------------------------------------------------- -int ctkCommandLineParser::fieldWidth() const -{ - return this->Internal->FieldWidth; -} - -// -------------------------------------------------------------------------- -void ctkCommandLineParser::beginGroup(const QString &description) -{ - this->Internal->CurrentGroup = description; -} - -// -------------------------------------------------------------------------- -void ctkCommandLineParser::endGroup() -{ - this->Internal->CurrentGroup.clear(); -} - -// -------------------------------------------------------------------------- -void ctkCommandLineParser::enableSettings(const QString &disableLongArg, const QString &disableShortArg) -{ - this->Internal->UseQSettings = true; - this->Internal->DisableQSettingsLongArg = disableLongArg; - this->Internal->DisableQSettingsShortArg = disableShortArg; -} - -// -------------------------------------------------------------------------- -void ctkCommandLineParser::mergeSettings(bool merge) -{ - this->Internal->MergeSettings = merge; -} - -// -------------------------------------------------------------------------- -bool ctkCommandLineParser::settingsEnabled() const -{ - return this->Internal->UseQSettings; -} - -// -------------------------------------------------------------------------- -QString ctkCommandLineParser::helpText(const char charPad) const -{ - QString text; - QTextStream stream(&text); - - QList deprecatedArgs; - - // Loop over grouped argument descriptions - QMapIterator> it( - this->Internal->GroupToArgumentDescriptionListMap); - while (it.hasNext()) - { - it.next(); - if (!it.key().isEmpty()) - { - stream << "\n" << it.key() << "\n"; - } - foreach (CommandLineParserArgumentDescription *argDesc, it.value()) - { - if (argDesc->Deprecated) - { - deprecatedArgs << argDesc; - } - else - { - // Extract associated value from settings if any - QString settingsValue; - if (this->Internal->Settings) - { - QString key; - if (!argDesc->LongArg.isEmpty()) - { - key = argDesc->LongArg; - } - else - { - key = argDesc->ShortArg; - } - settingsValue = this->Internal->Settings->value(key).toString(); - } - stream << argDesc->helpText(this->Internal->FieldWidth, charPad, settingsValue); - } - } - } - - if (!deprecatedArgs.empty()) - { - stream << "\nDeprecated arguments:\n"; - foreach (CommandLineParserArgumentDescription *argDesc, deprecatedArgs) - { - stream << argDesc->helpText(this->Internal->FieldWidth, charPad); - } - } - - return text; -} - -// -------------------------------------------------------------------------- -bool ctkCommandLineParser::argumentAdded(const QString &argument) const -{ - return this->Internal->ArgNameToArgumentDescriptionMap.contains(argument); -} - -// -------------------------------------------------------------------------- -bool ctkCommandLineParser::argumentParsed(const QString &argument) const -{ - return this->Internal->ProcessedArguments.contains(argument); -} - -// -------------------------------------------------------------------------- -void ctkCommandLineParser::setArgumentPrefix(const QString &longPrefix, const QString &shortPrefix) -{ - this->Internal->LongPrefix = longPrefix; - this->Internal->ShortPrefix = shortPrefix; -} - -// -------------------------------------------------------------------------- -void ctkCommandLineParser::setStrictModeEnabled(bool strictMode) -{ - this->Internal->StrictMode = strictMode; -} diff --git a/Applications/PluginGenerator/ctkCommandLineParser.h b/Applications/PluginGenerator/ctkCommandLineParser.h deleted file mode 100644 index da1de78e8f..0000000000 --- a/Applications/PluginGenerator/ctkCommandLineParser.h +++ /dev/null @@ -1,418 +0,0 @@ -/*========================================================================= - - Library: CTK - - Copyright (c) Kitware Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0.txt - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -=========================================================================*/ - -#ifndef __ctkCommandLineParser_h -#define __ctkCommandLineParser_h - -// Qt includes -#include -#include -#include - -class QSettings; - -/** - * \ingroup Core - * - * The CTK command line parser. - * - * Use this class to add information about the command line arguments - * your program understands and to easily parse them from a given list - * of strings. - * - * This parser provides the following features: - * - *
    - *
  • Add arguments by supplying a long name and/or a short name. - * Arguments are validated using a regular expression. They can have - * a default value and a help string.
  • - *
  • Deprecated arguments.
  • - *
  • Custom regular expressions for argument validation.
  • - *
  • Set different argument name prefixes for native platform look and feel.
  • - *
  • QSettings support. Default values for arguments can be read from - * a QSettings object.
  • - *
  • Create a help text for the command line arguments with support for - * grouping arguments.
  • - *
- * - * Here is an example how to use this class inside a main function: - * - * \code - * #include - * #include - * #include - * - * int main(int argc, char** argv) - * { - * QCoreApplication app(argc, argv); - * // This is used by QSettings - * QCoreApplication::setOrganizationName("MyOrg"); - * QCoreApplication::setApplicationName("MyApp"); - * - * ctkCommandLineParser parser; - * // Use Unix-style argument names - * parser.setArgumentPrefix("--", "-"); - * // Enable QSettings support - * parser.enableSettings("disable-settings"); - * - * // Add command line argument names - * parser.addArgument("disable-settings", "", QVariant::Bool, "Do not use QSettings"); - * parser.addArgument("help", "h", QVariant::Bool, "Show this help text"); - * parser.addArgument("search-paths", "s", QVariant::StringList, "A list of paths to search"); - * - * // Parse the command line arguments - * bool ok = false; - * QHash parsedArgs = parser.parseArguments(QCoreApplication::arguments(), &ok); - * if (!ok) - * { - * QTextStream(stderr, QIODevice::WriteOnly) << "Error parsing arguments: " - * << parser.errorString() << "\n"; - * return EXIT_FAILURE; - * } - * - * // Show a help message - * if (parsedArgs.contains("help") || parsedArgs.contains("h")) - * { - * QTextStream(stdout, QIODevice::WriteOnly) << parser.helpText(); - * return EXIT_SUCCESS; - * } - * - * // Do something - * - * return EXIT_SUCCESS; - * } - * \endcode - */ -class ctkCommandLineParser : public QObject -{ - Q_OBJECT - Q_PROPERTY(QString errorString READ errorString) - Q_PROPERTY(QStringList unparsedArguments READ unparsedArguments) - Q_PROPERTY(bool settingsEnabled READ settingsEnabled) - -public: - typedef QObject Superclass; - - /** - * Constructs a parser instance. - * - * If QSettings support is enabled by a call to enableSettings() - * a default constructed QSettings instance will be used when parsing - * the command line arguments. Make sure to call QCoreApplication::setOrganizationName() - * and QCoreApplication::setApplicationName() before using default - * constructed QSettings objects. - * - * @param newParent The QObject parent. - */ - ctkCommandLineParser(QObject *newParent = nullptr); - - /** - * Constructs a parser instance. - * - * If QSettings support is enabled by a call to enableSettings() - * the provided QSettings instance will be used. If the QSettings instance is - * zero, a default constructed QSettings instance will be used when parsing - * the command line arguments. Using a default constructed instance is usually - * what you want, if you have called QCoreApplication::setOrganizationName() - * and QCoreApplication::setApplicationName(). - * - * @param settings A QSettings instance which should be used. - * @param newParent The QObject parent. - * - * - */ - ctkCommandLineParser(QSettings *settings, QObject *newParent = nullptr); - - ~ctkCommandLineParser() override; - - /** - * Parse a given list of command line arguments. - * - * This method parses a list of QString elements considering the known arguments - * added by calls to addArgument(). If any one of the argument - * values does not match the corresponding regular expression, - * ok is set to false and an empty QHash object is returned. - * - * The keys in the returned QHash object correspond to the long argument string, - * if it is not empty. Otherwise, the short argument string is used as key. The - * QVariant values can safely be converted to the type specified in the - * addArgument() method call. - * - * @param arguments A QStringList containing command line arguments. Usually - * given by QCoreApplication::arguments(). - * @param ok A pointer to a boolean variable. Will be set to true - * if all regular expressions matched, false otherwise. - * @return A QHash object mapping the long argument (if empty, the short one) - * to a QVariant containing the value. - */ - QHash parseArguments(const QStringList &arguments, bool *ok = nullptr); - - /** - * Convenient method allowing to parse a given list of command line arguments. - * @see parseArguments(const QStringList &, bool*) - */ - QHash parseArguments(int argc, char **argv, bool *ok = nullptr); - - /** - * Returns a detailed error description if a call to parseArguments() - * failed. - * - * @return The error description, empty if no error occured. - * @see parseArguments(const QStringList&, bool*) - */ - QString errorString() const; - - /** - * This method returns all unparsed arguments, i.e. all arguments - * for which no long or short name has been registered via a call - * to addArgument(). - * - * @see addArgument() - * - * @return A list containing unparsed arguments. - */ - const QStringList &unparsedArguments() const; - - /** - * Checks if the given argument has been added via a call - * to addArgument(). - * - * @see addArgument() - * - * @param argument The argument to be checked. - * @return true if the argument was added, false - * otherwise. - */ - Q_INVOKABLE bool argumentAdded(const QString &argument) const; - - /** - * Checks if the given argument has been parsed successfully by a previous - * call to parseArguments(). - * - * @param argument The argument to be checked. - * @return true if the argument was parsed, false - * otherwise. - */ - Q_INVOKABLE bool argumentParsed(const QString &argument) const; - - /** - * Adds a command line argument. An argument can have a long name - * (like --long-argument-name), a short name (like -l), or both. The type - * of the argument can be specified by using the type parameter. - * The following types are supported: - * - * - * - * - * - * - * - * - *
Type# of parametersDefault regular exprExample
QVariant::String1.*--test-string StringParameter
QVariant::Bool0does not apply--enable-something
QVariant::StringList-1.*--test-list string1 string2
QVariant::Int1-?[0-9]+--test-int -5
- * - * The regular expressions are used to validate the parameters of command line - * arguments. You can restrict the valid set of parameters by calling - * setExactMatchRegularExpression() for your argument. - * - * Optionally, a help string and a default value can be provided for the argument. If - * the QVariant type of the default value does not match type, an - * exception is thrown. Arguments with default values are always returned by - * parseArguments(). - * - * You can also declare an argument deprecated, by setting deprecated - * to true. Alternatively you can add a deprecated argument by calling - * addDeprecatedArgument(). - * - * If the long or short argument has already been added, or if both are empty strings, - * the method call has no effect. - * - * @param longarg The long argument name. - * @param shortarg The short argument name. - * @param type The argument type (see the list above for supported types). - * @param argHelp A help string describing the argument. - * @param defaultValue A default value for the argument. - * @param ignoreRest All arguments after the current one will be ignored. - * @param deprecated Declares the argument deprecated. - * - * @see setExactMatchRegularExpression() - * @see addDeprecatedArgument() - * @throws std::logic_error If the QVariant type of defaultValue - * does not match type, a std::logic_error is thrown. - */ - void addArgument(const QString &longarg, - const QString &shortarg, - QVariant::Type type, - const QString &argHelp = QString(), - const QVariant &defaultValue = QVariant(), - bool ignoreRest = false, - bool deprecated = false); - - /** - * Adds a deprecated command line argument. If a deprecated argument is provided - * on the command line, argHelp is displayed in the console and - * processing continues with the next argument. - * - * Deprecated arguments are grouped separately at the end of the help text - * returned by helpText(). - * - * @param longarg The long argument name. - * @param shortarg The short argument name. - * @param argHelp A help string describing alternatives to the deprecated argument. - */ - void addDeprecatedArgument(const QString &longarg, const QString &shortarg, const QString &argHelp); - - /** - * Sets a custom regular expression for validating argument parameters. The method - * errorString() can be used the get the last error description. - * - * @param argument The previously added long or short argument name. - * @param expression A regular expression which the arugment parameters must match. - * @param exactMatchFailedMessage An error message explaining why the parameter did - * not match. - * - * @return true if the argument was found and the regular expression was set, - * false otherwise. - * - * @see errorString() - */ - bool setExactMatchRegularExpression(const QString &argument, - const QString &expression, - const QString &exactMatchFailedMessage); - - /** - * The field width for the argument names without the help text. - * - * @return The argument names field width in the help text. - */ - int fieldWidth() const; - - /** - * Creates a help text containing properly formatted argument names and help strings - * provided by calls to addArgument(). The arguments can be grouped by - * using beginGroup() and endGroup(). - * - * @param charPad The padding character. - * @return The formatted help text. - */ - QString helpText(const char charPad = ' ') const; - - /** - * Sets the argument prefix for long and short argument names. This can be used - * to create native command line arguments without changing the calls to - * addArgument(). For example on Unix-based systems, long argument - * names start with "--" and short names with "-", while on Windows argument names - * always start with "/". - * - * Note that all methods in ctkCommandLineParser which take an argument name - * expect the name as it was supplied to addArgument. - * - * Example usage: - * - * \code - * ctkCommandLineParser parser; - * parser.setArgumentPrefix("--", "-"); - * parser.addArgument("long-argument", "l", QVariant::String); - * QStringList args; - * args << "program name" << "--long-argument Hi"; - * parser.parseArguments(args); - * \endcode - * - * @param longPrefix The prefix for long argument names. - * @param shortPrefix The prefix for short argument names. - */ - void setArgumentPrefix(const QString &longPrefix, const QString &shortPrefix); - - /** - * Begins a new group for documenting arguments. All newly added arguments via - * addArgument() will be put in the new group. You can close the - * current group by calling endGroup() or be opening a new group. - * - * Note that groups cannot be nested and all arguments which do not belong to - * a group will be listed at the top of the text created by helpText(). - * - * @param description The description of the group - */ - void beginGroup(const QString &description); - - /** - * Ends the current group. - * - * @see beginGroup(const QString&) - */ - void endGroup(); - - /** - * Enables QSettings support in ctkCommandLineParser. If an argument name is found - * in the QSettings instance with a valid QVariant, the value is considered as - * a default value and overwrites default values registered with - * addArgument(). User supplied values on the command line overwrite - * values in the QSettings instance, except for arguments with multiple parameters - * which are merged with QSettings values. Call mergeSettings(false) - * to disable merging. - * - * See ctkCommandLineParser(QSettings*) for information about how to - * supply a QSettings instance. - * - * Additionally, a long and short argument name can be specified which will disable - * QSettings support if supplied on the command line. The argument name must be - * registered as a regular argument via addArgument(). - * - * @param disableLongArg Long argument name. - * @param disableShortArg Short argument name. - * - * @see ctkCommandLineParser(QSettings*) - */ - void enableSettings(const QString &disableLongArg = "", const QString &disableShortArg = ""); - - /** - * Controlls the merging behavior of user values and QSettings values. - * - * If merging is on (the default), user supplied values for an argument - * which can take more than one parameter are merged with values stored - * in the QSettings instance. If merging is off, the user values overwrite - * the QSettings values. - * - * @param merge true enables QSettings merging, false - * disables it. - */ - void mergeSettings(bool merge); - - /** - * Can be used to check if QSettings support has been enabled by a call to - * enableSettings(). - * - * @return true if QSettings support is enabled, false - * otherwise. - */ - bool settingsEnabled() const; - - /** - * Can be used to teach the parser to stop parsing the arguments and return False when - * an unknown argument is encountered. By default StrictMode is disabled. - * - * @see parseArguments(const QStringList &, bool*) - */ - void setStrictModeEnabled(bool strictMode); - -private: - class ctkInternal; - ctkInternal *Internal; -}; -#endif diff --git a/Applications/PluginGenerator/plugin_template.qrc b/Applications/PluginGenerator/plugin_template.qrc deleted file mode 100644 index 63399dd6d4..0000000000 --- a/Applications/PluginGenerator/plugin_template.qrc +++ /dev/null @@ -1,18 +0,0 @@ - - - PluginTemplate/CMakeLists.txt - PluginTemplate/files.cmake - PluginTemplate/manifest_headers.cmake - PluginTemplate/plugin.xml - PluginTemplate/documentation/doxygen/modules.dox - PluginTemplate/documentation/UserManual/icon.xpm - PluginTemplate/documentation/UserManual/Manual.dox - PluginTemplate/resources/icon.xpm - PluginTemplate/src/internal/mitkPluginActivator.cpp - PluginTemplate/src/internal/mitkPluginActivator.h - PluginTemplate/src/internal/QmitkTemplateView.cpp - PluginTemplate/src/internal/QmitkTemplateView.h - PluginTemplate/src/internal/QmitkTemplateViewControls.ui - COPYRIGHT_HEADER - - diff --git a/Applications/PluginGenerator/project_template.qrc b/Applications/PluginGenerator/project_template.qrc deleted file mode 100644 index 0a59ca2311..0000000000 --- a/Applications/PluginGenerator/project_template.qrc +++ /dev/null @@ -1,16 +0,0 @@ - - - ProjectTemplate/CMakeLists.txt - ProjectTemplate/LICENSE - ProjectTemplate/SuperBuild.cmake - ProjectTemplate/Apps/TemplateApp/CMakeLists.txt - ProjectTemplate/Apps/TemplateApp/startTemplateApp.bat.in - ProjectTemplate/Apps/TemplateApp/TemplateApp.cpp - ProjectTemplate/Apps/TemplateApp/TemplateApp.ini - ProjectTemplate/CMake/CPackSetup.cmake - ProjectTemplate/CMake/MacroEmptyExternalProject.cmake - ProjectTemplate/CMakeExternals/MITK.cmake - ProjectTemplate/Plugins/Plugins.cmake - LICENSE - - diff --git a/CMake/mitkTestPluginGenerator.cmake b/CMake/mitkTestPluginGenerator.cmake deleted file mode 100644 index 318a20f120..0000000000 --- a/CMake/mitkTestPluginGenerator.cmake +++ /dev/null @@ -1,109 +0,0 @@ -if(BUILD_TESTING) - - set(proj GP) # Means GenerateProject (use a short name due to Windows limitations) - set(test_project_out_dir "${MITK_BINARY_DIR}") - set(test_project_source_dir "${MITK_BINARY_DIR}/${proj}") - set(test_project_binary_dir "${MITK_BINARY_DIR}/${proj}-bin") - - add_test(NAME mitkPluginGeneratorCleanTest - COMMAND ${CMAKE_COMMAND} -E remove_directory "${test_project_source_dir}" - ) - - add_test(NAME mitkPluginGeneratorCleanTest2 - COMMAND ${CMAKE_COMMAND} -E remove_directory "${test_project_binary_dir}" - ) - - add_test(NAME mitkPluginGeneratorCleanTest3 - COMMAND ${CMAKE_COMMAND} -E make_directory "${test_project_binary_dir}" - ) - set_tests_properties(mitkPluginGeneratorCleanTest3 PROPERTIES - DEPENDS mitkPluginGeneratorCleanTest2) - - add_test(NAME mitkPluginGeneratorCreateTest - COMMAND ${exec_target} --project-name "${proj}" --project-app-name "TestApp" - -ps org.test.plugin -pn "Test Plugin" -vn "Test View" - -o ${test_project_out_dir} -y - ) - set_tests_properties(mitkPluginGeneratorCreateTest PROPERTIES - DEPENDS "${exec_target};mitkPluginGeneratorCleanTest;mitkPluginGeneratorCleanTest3") - - mitkFunctionGetLibrarySearchPaths(MITK_RUNTIME_PATH_RELEASE release RELEASE) - mitkFunctionGetLibrarySearchPaths(MITK_RUNTIME_PATH_DEBUG debug DEBUG) - set(test_env_path ${MITK_RUNTIME_PATH_RELEASE} ${MITK_RUNTIME_PATH_DEBUG} $ENV{PATH}) - list(REMOVE_DUPLICATES test_env_path) - string (REGEX REPLACE "\;" "\\\;" test_env_path "${test_env_path}") - set_property(TEST mitkPluginGeneratorCreateTest APPEND PROPERTY ENVIRONMENT "PATH=${test_env_path}") - set_property(TEST mitkPluginGeneratorCreateTest PROPERTY SKIP_RETURN_CODE 77) - - set(configure_options - -DMITK_DIR:PATH=${MITK_BINARY_DIR} - -DCMAKE_C_COMPILER:STRING=${CMAKE_C_COMPILER} - -DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER} - -DCMAKE_OSX_SYSROOT:PATH=${CMAKE_OSX_SYSROOT} - -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=${CMAKE_OSX_DEPLOYMENT_TARGET} - -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES} - -G${CMAKE_GENERATOR} - -C "${MITK_BINARY_DIR}/mitkTestInitialCache.txt" - ) - - if(CMAKE_PREFIX_PATH) - string (REPLACE ";" "$" CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH}") - list(APPEND configure_options -DCMAKE_PREFIX_PATH:PATH=${CMAKE_PREFIX_PATH}) - endif() - - if(CMAKE_CONFIGURATION_TYPES) - foreach(config ${CMAKE_CONFIGURATION_TYPES}) - add_test(NAME mitkPluginGeneratorConfigureTest-${config} CONFIGURATIONS ${config} - WORKING_DIRECTORY "${test_project_binary_dir}" - COMMAND ${CMAKE_COMMAND} ${configure_options} - "${test_project_source_dir}") - set_tests_properties(mitkPluginGeneratorConfigureTest-${config} PROPERTIES - DEPENDS mitkPluginGeneratorCreateTest) - - add_test(NAME mitkPluginGeneratorBuildTest-${config} CONFIGURATIONS ${config} - COMMAND ${CMAKE_COMMAND} --build ${test_project_binary_dir} --config ${config}) - set_tests_properties(mitkPluginGeneratorBuildTest-${config} PROPERTIES - DEPENDS mitkPluginGeneratorConfigureTest-${config}) - endforeach() - else() - add_test(NAME mitkPluginGeneratorConfigureTest-${CMAKE_BUILD_TYPE} - WORKING_DIRECTORY "${test_project_binary_dir}" - COMMAND ${CMAKE_COMMAND} ${configure_options} - -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} - "${test_project_source_dir}") - set_tests_properties(mitkPluginGeneratorConfigureTest-${CMAKE_BUILD_TYPE} PROPERTIES - DEPENDS mitkPluginGeneratorCreateTest) - - add_test(NAME mitkPluginGeneratorBuildTest-${CMAKE_BUILD_TYPE} - COMMAND ${CMAKE_COMMAND} --build ${test_project_binary_dir} --config ${CMAKE_BUILD_TYPE}) - set_tests_properties(mitkPluginGeneratorBuildTest-${CMAKE_BUILD_TYPE} PROPERTIES - DEPENDS mitkPluginGeneratorConfigureTest-${CMAKE_BUILD_TYPE}) - endif() - - set(package_test_configurations) - if(WIN32) - # Only test packaging if build type is "Release" on Windows - set(package_test_configurations CONFIGURATIONS Release) - endif() - - if(NOT MITK_FAST_TESTING) - - if(WIN32) - # Only test packaging if build type is "Release" on Windows - add_test(NAME mitkPluginGeneratorPackageTest CONFIGURATIONS Release - COMMAND ${CMAKE_COMMAND} --build ${test_project_binary_dir}/${proj}-build --config Release --target package) - set_tests_properties(mitkPluginGeneratorPackageTest PROPERTIES - DEPENDS mitkPluginGeneratorBuildTest-Release - TIMEOUT 6000) - elseif(CMAKE_BUILD_TYPE) - add_test(mitkPluginGeneratorPackageTest - ${CMAKE_COMMAND} --build ${test_project_binary_dir}/${proj}-build --config ${CMAKE_BUILD_TYPE} --target package) - set_tests_properties(mitkPluginGeneratorPackageTest PROPERTIES - DEPENDS mitkPluginGeneratorBuildTest-${CMAKE_BUILD_TYPE} - TIMEOUT 6000) - endif() - - endif() - -endif() - diff --git a/CMakeLists.txt b/CMakeLists.txt index aaecc5a94a..88c833336b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,1385 +1,1377 @@ #[[ When increasing the minimum required version, check if Boost_ADDITIONAL_VERSIONS in CMake/PackageDepends/MITK_Boost_Config.cmake can be removed. See the first long comment in CMakeExternals/Boost.cmake for details. ]] set(MITK_CMAKE_MINIMUM_REQUIRED_VERSION 3.18) cmake_minimum_required(VERSION ${MITK_CMAKE_MINIMUM_REQUIRED_VERSION}) if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.19 AND CMAKE_VERSION VERSION_LESS 3.19.2) message(FATAL_ERROR "\ CMake v${CMAKE_VERSION} is defective [1]. \ Please either downgrade to v3.18 or upgrade to at least v3.19.2.\n\ [1] https://gitlab.kitware.com/cmake/cmake/-/issues/21529") endif() #----------------------------------------------------------------------------- # Policies #----------------------------------------------------------------------------- #[[ T28060 https://cmake.org/cmake/help/v3.18/policy/CMP0091.html https://cmake.org/cmake/help/v3.18/variable/CMAKE_MSVC_RUNTIME_LIBRARY.html We pass CMP0091 to all external projects as command-line argument: -DCMAKE_POLICY_DEFAULT_CMP0091:STRING=OLD ]] cmake_policy(SET CMP0091 OLD) #----------------------------------------------------------------------------- # Superbuild Option - Enabled by default #----------------------------------------------------------------------------- option(MITK_USE_SUPERBUILD "Build MITK and the projects it depends on via SuperBuild.cmake." ON) if(MITK_USE_SUPERBUILD) project(MITK-superbuild) set(MITK_SOURCE_DIR ${PROJECT_SOURCE_DIR}) set(MITK_BINARY_DIR ${PROJECT_BINARY_DIR}) else() project(MITK VERSION 2022.10.99) include_directories(SYSTEM ${MITK_SUPERBUILD_BINARY_DIR}) endif() #----------------------------------------------------------------------------- # MITK Extension Feature #----------------------------------------------------------------------------- set(MITK_EXTENSION_DIRS "" CACHE STRING "") unset(MITK_ABSOLUTE_EXTENSION_DIRS) foreach(MITK_EXTENSION_DIR ${MITK_EXTENSION_DIRS}) get_filename_component(MITK_ABSOLUTE_EXTENSION_DIR "${MITK_EXTENSION_DIR}" ABSOLUTE) list(APPEND MITK_ABSOLUTE_EXTENSION_DIRS "${MITK_ABSOLUTE_EXTENSION_DIR}") endforeach() set(MITK_DIR_PLUS_EXTENSION_DIRS "${MITK_SOURCE_DIR}" ${MITK_ABSOLUTE_EXTENSION_DIRS}) #----------------------------------------------------------------------------- # Update CMake module path #----------------------------------------------------------------------------- set(MITK_CMAKE_DIR ${MITK_SOURCE_DIR}/CMake) set(CMAKE_MODULE_PATH ${MITK_CMAKE_DIR}) foreach(MITK_EXTENSION_DIR ${MITK_ABSOLUTE_EXTENSION_DIRS}) set(MITK_CMAKE_EXTENSION_DIR "${MITK_EXTENSION_DIR}/CMake") if(EXISTS "${MITK_CMAKE_EXTENSION_DIR}") list(APPEND CMAKE_MODULE_PATH "${MITK_CMAKE_EXTENSION_DIR}") endif() endforeach() #----------------------------------------------------------------------------- # CMake function(s) and macro(s) #----------------------------------------------------------------------------- # Standard CMake macros include(FeatureSummary) include(CTest) include(CMakeParseArguments) include(FindPackageHandleStandardArgs) # MITK macros include(mitkFunctionGetGccVersion) include(mitkFunctionCheckCompilerFlags) include(mitkFunctionSuppressWarnings) # includes several functions include(mitkMacroEmptyExternalProject) include(mitkFunctionEnableBuildConfiguration) include(mitkFunctionWhitelists) include(mitkFunctionAddExternalProject) include(mitkFunctionAddLibrarySearchPaths) SUPPRESS_VC_DEPRECATED_WARNINGS() #----------------------------------------------------------------------------- # Set a default build type if none was specified #----------------------------------------------------------------------------- if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) message(STATUS "Setting build type to 'Debug' as none was specified.") set(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build." FORCE) # Set the possible values of build type for cmake-gui set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") endif() if(CMAKE_COMPILER_IS_GNUCXX) mitkFunctionGetGccVersion(${CMAKE_CXX_COMPILER} GCC_VERSION) else() set(GCC_VERSION 0) endif() set(MITK_CXX_STANDARD 17) set(CMAKE_CXX_EXTENSIONS 0) set(CMAKE_CXX_STANDARD ${MITK_CXX_STANDARD}) set(CMAKE_CXX_STANDARD_REQUIRED 1) # This is necessary to avoid problems with compile feature checks. # CMAKE_CXX_STANDARD seems to only set the -std=c++ flag for targets. # However, compile flag checks also need to be done with -std=c++. # The MITK_CXX_FLAG variable is also used for external projects # build during the MITK super-build. mitkFunctionCheckCompilerFlags("-std=c++${MITK_CXX_STANDARD}" MITK_CXX${MITK_CXX_STANDARD}_FLAG) #----------------------------------------------------------------------------- # Warn if source or build path is too long #----------------------------------------------------------------------------- if(WIN32) set(_src_dir_length_max 50) set(_bin_dir_length_max 50) if(MITK_USE_SUPERBUILD) set(_src_dir_length_max 34) # _src_dir_length_max - strlen(ep/src/ITK-build) set(_bin_dir_length_max 40) # _bin_dir_length_max - strlen(MITK-build) endif() string(LENGTH "${MITK_SOURCE_DIR}" _src_n) string(LENGTH "${MITK_BINARY_DIR}" _bin_n) # The warnings should be converted to errors if(_src_n GREATER _src_dir_length_max) message(WARNING "MITK source code directory path length is too long (${_src_n} > ${_src_dir_length_max})." "Please move the MITK source code directory to a directory with a shorter path." ) endif() if(_bin_n GREATER _bin_dir_length_max) message(WARNING "MITK build directory path length is too long (${_bin_n} > ${_bin_dir_length_max})." "Please move the MITK build directory to a directory with a shorter path." ) endif() endif() #----------------------------------------------------------------------------- # Additional MITK Options (also shown during superbuild) #----------------------------------------------------------------------------- # ----------------------------------------- # General build options option(BUILD_SHARED_LIBS "Build MITK with shared libraries" ON) option(WITH_COVERAGE "Enable/Disable coverage" OFF) option(BUILD_TESTING "Test the project" ON) option(MITK_FAST_TESTING "Disable long-running tests like packaging" OFF) option(MITK_XVFB_TESTING "Execute test drivers through xvfb-run" OFF) option(MITK_BUILD_ALL_APPS "Build all MITK applications" OFF) option(MITK_BUILD_EXAMPLES "Build the MITK Examples" OFF) mark_as_advanced( MITK_XVFB_TESTING MITK_FAST_TESTING MITK_BUILD_ALL_APPS ) #----------------------------------------------------------------------------- # Set UI testing flags #----------------------------------------------------------------------------- if(MITK_XVFB_TESTING) set(MITK_XVFB_TESTING_COMMAND "xvfb-run" "--auto-servernum" CACHE STRING "Command and options to test through Xvfb") mark_as_advanced(MITK_XVFB_TESTING_COMMAND) endif(MITK_XVFB_TESTING) # ----------------------------------------- # Other options set(MITK_CUSTOM_REVISION_DESC "" CACHE STRING "Override MITK revision description") mark_as_advanced(MITK_CUSTOM_REVISION_DESC) set_property(GLOBAL PROPERTY MITK_EXTERNAL_PROJECTS "") include(CMakeExternals/ExternalProjectList.cmake) foreach(MITK_EXTENSION_DIR ${MITK_ABSOLUTE_EXTENSION_DIRS}) set(MITK_CMAKE_EXTERNALS_EXTENSION_DIR "${MITK_EXTENSION_DIR}/CMakeExternals") if(EXISTS "${MITK_CMAKE_EXTERNALS_EXTENSION_DIR}/ExternalProjectList.cmake") include("${MITK_CMAKE_EXTERNALS_EXTENSION_DIR}/ExternalProjectList.cmake") endif() endforeach() # ----------------------------------------- # Other MITK_USE_* options not related to # external projects build via the # MITK superbuild option(MITK_USE_BLUEBERRY "Build the BlueBerry platform" ON) option(MITK_USE_OpenCL "Use OpenCL GPU-Computing library" OFF) option(MITK_USE_OpenMP "Use OpenMP" OFF) option(MITK_USE_Python3 "Use Python 3" OFF) #----------------------------------------------------------------------------- # Build configurations #----------------------------------------------------------------------------- set(_buildConfigs "Custom") file(GLOB _buildConfigFiles CMake/BuildConfigurations/*.cmake) foreach(_buildConfigFile ${_buildConfigFiles}) get_filename_component(_buildConfigFile ${_buildConfigFile} NAME_WE) list(APPEND _buildConfigs ${_buildConfigFile}) endforeach() foreach(MITK_EXTENSION_DIR ${MITK_ABSOLUTE_EXTENSION_DIRS}) file(GLOB _extBuildConfigFiles "${MITK_EXTENSION_DIR}/CMake/BuildConfigurations/*.cmake") foreach(_extBuildConfigFile ${_extBuildConfigFiles}) get_filename_component(_extBuildConfigFile "${_extBuildConfigFile}" NAME_WE) list(APPEND _buildConfigs "${_extBuildConfigFile}") endforeach() list(REMOVE_DUPLICATES _buildConfigs) endforeach() set(MITK_BUILD_CONFIGURATION "Custom" CACHE STRING "Use pre-defined MITK configurations") set_property(CACHE MITK_BUILD_CONFIGURATION PROPERTY STRINGS ${_buildConfigs}) mitkFunctionEnableBuildConfiguration() mitkFunctionCreateWhitelistPaths(MITK) mitkFunctionFindWhitelists(MITK) # ----------------------------------------- # Qt version related variables option(MITK_USE_Qt5 "Use Qt 5 library" ON) if(MITK_USE_Qt5) if(WIN32) set(MITK_QT5_MINIMUM_VERSION 5.12.9) else() set(MITK_QT5_MINIMUM_VERSION 5.12) endif() set(MITK_QT5_COMPONENTS Concurrent OpenGL PrintSupport Script Sql Svg Widgets Xml XmlPatterns WebEngineWidgets UiTools Help LinguistTools) if(APPLE) list(APPEND MITK_QT5_COMPONENTS DBus) elseif(UNIX) list(APPEND MITK_QT5_COMPONENTS X11Extras) endif() # Hint at default install locations of Qt if(NOT Qt5_DIR) if(MSVC) set(_dir_candidates "C:/Qt") if(CMAKE_GENERATOR MATCHES "^Visual Studio [0-9]+ ([0-9]+)") set(_compilers "msvc${CMAKE_MATCH_1}") elseif(CMAKE_GENERATOR MATCHES "Ninja") include(mitkFunctionGetMSVCVersion) mitkFunctionGetMSVCVersion() if(VISUAL_STUDIO_PRODUCT_NAME MATCHES "^Visual Studio ([0-9]+)") set(_compilers "msvc${CMAKE_MATCH_1}") endif() endif() if(_compilers MATCHES "[0-9]+") if (CMAKE_MATCH_0 EQUAL 2022) list(APPEND _compilers "msvc2019" "msvc2017") # Binary compatible elseif (CMAKE_MATCH_0 EQUAL 2019) list(APPEND _compilers "msvc2017") # Binary compatible endif() endif() else() set(_dir_candidates ~/Qt) if(APPLE) set(_compilers clang) else() list(APPEND _dir_candidates /opt/Qt) set(_compilers gcc) endif() endif() if(CMAKE_SIZEOF_VOID_P EQUAL 8) foreach(_compiler ${_compilers}) list(APPEND _compilers64 "${_compiler}_64") endforeach() set(_compilers ${_compilers64}) endif() foreach(_dir_candidate ${_dir_candidates}) get_filename_component(_dir_candidate ${_dir_candidate} REALPATH) foreach(_compiler ${_compilers}) set(_glob_expression "${_dir_candidate}/5.*/${_compiler}") file(GLOB _hints ${_glob_expression}) list(SORT _hints) list(APPEND MITK_QT5_HINTS ${_hints}) endforeach() endforeach() endif() find_package(Qt5 ${MITK_QT5_MINIMUM_VERSION} COMPONENTS ${MITK_QT5_COMPONENTS} REQUIRED HINTS ${MITK_QT5_HINTS}) endif() # ----------------------------------------- # Custom dependency logic if(WIN32 AND Qt5_DIR) set(_dir_candidate "${Qt5_DIR}/../../../../../Tools/OpenSSL/Win_x64") get_filename_component(_dir_candidate ${_dir_candidate} ABSOLUTE) if(EXISTS "${_dir_candidate}") set(OPENSSL_ROOT_DIR "${_dir_candidate}") endif() endif() find_package(OpenSSL) option(MITK_USE_SYSTEM_Boost "Use the system Boost" OFF) set(MITK_USE_Boost_LIBRARIES "" CACHE STRING "A semi-colon separated list of required Boost libraries") if(MITK_USE_cpprestsdk) if(NOT OpenSSL_FOUND) set(openssl_message "Could not find OpenSSL (dependency of C++ REST SDK).\n") if(UNIX) if(APPLE) set(openssl_message "${openssl_message}Please install it using your favorite package management " "system (i.e. Homebrew or MacPorts).\n") else() set(openssl_message "${openssl_message}Please install the dev package of OpenSSL (i.e. libssl-dev).\n") endif() else() set(openssl_message "${openssl_message}Please either install Win32 OpenSSL:\n" " https://slproweb.com/products/Win32OpenSSL.html\n" "Or use the Qt Maintenance tool to install:\n" " Developer and Designer Tools > OpenSSL Toolkit > OpenSSL 64-bit binaries\n") endif() set(openssl_message "${openssl_message}If it still cannot be found, you can hint CMake to find OpenSSL by " "adding/setting the OPENSSL_ROOT_DIR variable to the root directory of an " "OpenSSL installation. Make sure to clear variables of partly found " "versions of OpenSSL before, or they will be mixed up.") message(FATAL_ERROR ${openssl_message}) endif() list(APPEND MITK_USE_Boost_LIBRARIES date_time regex system) if(UNIX) list(APPEND MITK_USE_Boost_LIBRARIES atomic chrono filesystem random thread) endif() list(REMOVE_DUPLICATES MITK_USE_Boost_LIBRARIES) set(MITK_USE_Boost_LIBRARIES ${MITK_USE_Boost_LIBRARIES} CACHE STRING "A semi-colon separated list of required Boost libraries" FORCE) endif() if(MITK_USE_Python3) set(MITK_USE_ZLIB ON CACHE BOOL "" FORCE) if(APPLE AND CMAKE_FRAMEWORK_PATH AND CMAKE_FRAMEWORK_PATH MATCHES "python3\\.?([0-9]+)") find_package(Python3 3.${CMAKE_MATCH_1} EXACT REQUIRED COMPONENTS Interpreter Development NumPy) else() find_package(Python3 REQUIRED COMPONENTS Interpreter Development NumPy) endif() if(WIN32) string(REPLACE "\\" "/" Python3_STDARCH "${Python3_STDARCH}") string(REPLACE "\\" "/" Python3_STDLIB "${Python3_STDLIB}") string(REPLACE "\\" "/" Python3_SITELIB "${Python3_SITELIB}") endif() endif() if(BUILD_TESTING AND NOT MITK_USE_CppUnit) message("> Forcing MITK_USE_CppUnit to ON because BUILD_TESTING=ON") set(MITK_USE_CppUnit ON CACHE BOOL "Use CppUnit for unit tests" FORCE) endif() if(MITK_USE_BLUEBERRY) option(MITK_BUILD_ALL_PLUGINS "Build all MITK plugins" OFF) mark_as_advanced(MITK_BUILD_ALL_PLUGINS) if(NOT MITK_USE_CTK) message("> Forcing MITK_USE_CTK to ON because of MITK_USE_BLUEBERRY") set(MITK_USE_CTK ON CACHE BOOL "Use CTK in MITK" FORCE) endif() endif() #----------------------------------------------------------------------------- # Pixel type multiplexing #----------------------------------------------------------------------------- # Customize the default pixel types for multiplex macros set(MITK_ACCESSBYITK_INTEGRAL_PIXEL_TYPES "int, unsigned int, short, unsigned short, char, unsigned char" CACHE STRING "List of integral pixel types used in AccessByItk and InstantiateAccessFunction macros") set(MITK_ACCESSBYITK_FLOATING_PIXEL_TYPES "double, float" CACHE STRING "List of floating pixel types used in AccessByItk and InstantiateAccessFunction macros") set(MITK_ACCESSBYITK_COMPOSITE_PIXEL_TYPES "itk::RGBPixel, itk::RGBAPixel" CACHE STRING "List of composite pixel types used in AccessByItk and InstantiateAccessFunction macros") set(MITK_ACCESSBYITK_DIMENSIONS "2,3" CACHE STRING "List of dimensions used in AccessByItk and InstantiateAccessFunction macros") mark_as_advanced(MITK_ACCESSBYITK_INTEGRAL_PIXEL_TYPES MITK_ACCESSBYITK_FLOATING_PIXEL_TYPES MITK_ACCESSBYITK_COMPOSITE_PIXEL_TYPES MITK_ACCESSBYITK_DIMENSIONS ) # consistency checks if(NOT MITK_ACCESSBYITK_INTEGRAL_PIXEL_TYPES) set(MITK_ACCESSBYITK_INTEGRAL_PIXEL_TYPES "int, unsigned int, short, unsigned short, char, unsigned char" CACHE STRING "List of integral pixel types used in AccessByItk and InstantiateAccessFunction macros" FORCE) endif() if(NOT MITK_ACCESSBYITK_FLOATING_PIXEL_TYPES) set(MITK_ACCESSBYITK_FLOATING_PIXEL_TYPES "double, float" CACHE STRING "List of floating pixel types used in AccessByItk and InstantiateAccessFunction macros" FORCE) endif() if(NOT MITK_ACCESSBYITK_COMPOSITE_PIXEL_TYPES) set(MITK_ACCESSBYITK_COMPOSITE_PIXEL_TYPES "itk::RGBPixel, itk::RGBAPixel" CACHE STRING "List of composite pixel types used in AccessByItk and InstantiateAccessFunction macros" FORCE) endif() if(NOT MITK_ACCESSBYITK_VECTOR_PIXEL_TYPES) string(REPLACE "," ";" _integral_types ${MITK_ACCESSBYITK_INTEGRAL_PIXEL_TYPES}) string(REPLACE "," ";" _floating_types ${MITK_ACCESSBYITK_FLOATING_PIXEL_TYPES}) foreach(_scalar_type ${_integral_types} ${_floating_types}) set(MITK_ACCESSBYITK_VECTOR_PIXEL_TYPES "${MITK_ACCESSBYITK_VECTOR_PIXEL_TYPES}itk::VariableLengthVector<${_scalar_type}>,") endforeach() string(LENGTH "${MITK_ACCESSBYITK_VECTOR_PIXEL_TYPES}" _length) math(EXPR _length "${_length} - 1") string(SUBSTRING "${MITK_ACCESSBYITK_VECTOR_PIXEL_TYPES}" 0 ${_length} MITK_ACCESSBYITK_VECTOR_PIXEL_TYPES) set(MITK_ACCESSBYITK_VECTOR_PIXEL_TYPES ${MITK_ACCESSBYITK_VECTOR_PIXEL_TYPES} CACHE STRING "List of vector pixel types used in AccessByItk and InstantiateAccessFunction macros for itk::VectorImage types" FORCE) endif() if(NOT MITK_ACCESSBYITK_DIMENSIONS) set(MITK_ACCESSBYITK_DIMENSIONS "2,3" CACHE STRING "List of dimensions used in AccessByItk and InstantiateAccessFunction macros") endif() find_package(Git REQUIRED) #----------------------------------------------------------------------------- # Superbuild script #----------------------------------------------------------------------------- if(MITK_USE_SUPERBUILD) include("${CMAKE_CURRENT_SOURCE_DIR}/SuperBuild.cmake") # Print configuration summary message("\n\n") feature_summary( DESCRIPTION "------- FEATURE SUMMARY FOR ${PROJECT_NAME} -------" WHAT ALL) return() endif() #***************************************************************************** #**************************** END OF SUPERBUILD **************************** #***************************************************************************** #----------------------------------------------------------------------------- # Organize MITK targets in folders #----------------------------------------------------------------------------- set_property(GLOBAL PROPERTY USE_FOLDERS ON) set(MITK_ROOT_FOLDER "MITK" CACHE STRING "") mark_as_advanced(MITK_ROOT_FOLDER) #----------------------------------------------------------------------------- # CMake function(s) and macro(s) #----------------------------------------------------------------------------- include(WriteBasicConfigVersionFile) include(CheckCXXSourceCompiles) include(GenerateExportHeader) include(mitkFunctionAddManifest) include(mitkFunctionAddCustomModuleTest) include(mitkFunctionCheckModuleDependencies) include(mitkFunctionCompileSnippets) include(mitkFunctionConfigureVisualStudioUserProjectFile) include(mitkFunctionCreateBlueBerryApplication) include(mitkFunctionCreateCommandLineApp) include(mitkFunctionCreateModule) include(mitkFunctionCreatePlugin) include(mitkFunctionCreateProvisioningFile) include(mitkFunctionGetLibrarySearchPaths) include(mitkFunctionGetVersion) include(mitkFunctionGetVersionDescription) include(mitkFunctionInstallAutoLoadModules) include(mitkFunctionInstallCTKPlugin) include(mitkFunctionInstallProvisioningFiles) include(mitkFunctionInstallThirdPartyCTKPlugins) include(mitkFunctionOrganizeSources) include(mitkFunctionUseModules) if( ${MITK_USE_MatchPoint} ) include(mitkFunctionCreateMatchPointDeployedAlgorithm) endif() include(mitkMacroConfigureItkPixelTypes) include(mitkMacroCreateExecutable) include(mitkMacroCreateModuleTests) include(mitkMacroGenerateToolsLibrary) include(mitkMacroGetLinuxDistribution) include(mitkMacroGetPMDPlatformString) include(mitkMacroInstall) include(mitkMacroInstallHelperApp) include(mitkMacroInstallTargets) include(mitkMacroMultiplexPicType) # Deprecated include(mitkMacroCreateCTKPlugin) #----------------------------------------------------------------------------- # Global CMake variables #----------------------------------------------------------------------------- if(NOT DEFINED CMAKE_DEBUG_POSTFIX) # We can't do this yet because the CTK Plugin Framework # cannot cope with a postfix yet. #set(CMAKE_DEBUG_POSTFIX d) endif() #----------------------------------------------------------------------------- # Output directories. #----------------------------------------------------------------------------- set(_default_LIBRARY_output_dir lib) set(_default_RUNTIME_output_dir bin) set(_default_ARCHIVE_output_dir lib) foreach(type LIBRARY RUNTIME ARCHIVE) # Make sure the directory exists if(MITK_CMAKE_${type}_OUTPUT_DIRECTORY AND NOT EXISTS ${MITK_CMAKE_${type}_OUTPUT_DIRECTORY}) message("Creating directory MITK_CMAKE_${type}_OUTPUT_DIRECTORY: ${MITK_CMAKE_${type}_OUTPUT_DIRECTORY}") file(MAKE_DIRECTORY "${MITK_CMAKE_${type}_OUTPUT_DIRECTORY}") endif() if(MITK_CMAKE_${type}_OUTPUT_DIRECTORY) set(CMAKE_${type}_OUTPUT_DIRECTORY ${MITK_CMAKE_${type}_OUTPUT_DIRECTORY}) else() set(CMAKE_${type}_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${_default_${type}_output_dir}) set(MITK_CMAKE_${type}_OUTPUT_DIRECTORY ${CMAKE_${type}_OUTPUT_DIRECTORY}) endif() set(CMAKE_${type}_OUTPUT_DIRECTORY ${CMAKE_${type}_OUTPUT_DIRECTORY} CACHE INTERNAL "Output directory for ${type} files.") mark_as_advanced(CMAKE_${type}_OUTPUT_DIRECTORY) endforeach() #----------------------------------------------------------------------------- # Set MITK specific options and variables (NOT available during superbuild) #----------------------------------------------------------------------------- if(OpenSSL_FOUND AND WIN32) set(MITK_OPENSSL_SSL_DLL "" CACHE FILEPATH "") set(MITK_OPENSSL_CRYPTO_DLL "" CACHE FILEPATH "") if(MITK_OPENSSL_SSL_DLL AND EXISTS "${MITK_OPENSSL_SSL_DLL}" AND MITK_OPENSSL_CRYPTO_DLL AND EXISTS "${MITK_OPENSSL_CRYPTO_DLL}") foreach(config_type ${CMAKE_CONFIGURATION_TYPES}) execute_process(COMMAND "${CMAKE_COMMAND}" -E make_directory "${MITK_BINARY_DIR}/bin/${config_type}") configure_file("${MITK_OPENSSL_SSL_DLL}" "${MITK_BINARY_DIR}/bin/${config_type}/" COPYONLY) configure_file("${MITK_OPENSSL_CRYPTO_DLL}" "${MITK_BINARY_DIR}/bin/${config_type}/" COPYONLY) endforeach() MITK_INSTALL(FILES "${MITK_OPENSSL_SSL_DLL}" "${MITK_OPENSSL_CRYPTO_DLL}" ) endif() endif() # Look for optional Doxygen package find_package(Doxygen) option(BLUEBERRY_DEBUG_SMARTPOINTER "Enable code for debugging smart pointers" OFF) mark_as_advanced(BLUEBERRY_DEBUG_SMARTPOINTER) # Ask the user to show the console window for applications option(MITK_SHOW_CONSOLE_WINDOW "Use this to enable or disable the console window when starting MITK GUI Applications" ON) mark_as_advanced(MITK_SHOW_CONSOLE_WINDOW) # As of Windows 10 Version 1903 (May 2019 Update), applications can use the UTF-8 code page if(WIN32) option(MITK_UTF8 "Use UTF-8 code page in MITK applications on Windows" ON) mark_as_advanced(MITK_UTF8) endif() if(NOT MITK_FAST_TESTING) if(MITK_CTEST_SCRIPT_MODE STREQUAL "Continuous" OR MITK_CTEST_SCRIPT_MODE STREQUAL "Experimental") set(MITK_FAST_TESTING ON) endif() endif() if(NOT UNIX) set(MITK_WIN32_FORCE_STATIC "STATIC" CACHE INTERNAL "Use this variable to always build static libraries on non-unix platforms") endif() if(MITK_BUILD_ALL_PLUGINS) set(MITK_BUILD_ALL_PLUGINS_OPTION "FORCE_BUILD_ALL") endif() # Configure pixel types used for ITK image access multiplexing mitkMacroConfigureItkPixelTypes() # Configure module naming conventions set(MITK_MODULE_NAME_REGEX_MATCH "^[A-Z].*$") set(MITK_MODULE_NAME_REGEX_NOT_MATCH "^[Mm][Ii][Tt][Kk].*$") set(MITK_DEFAULT_MODULE_NAME_PREFIX "Mitk") set(MITK_MODULE_NAME_PREFIX ${MITK_DEFAULT_MODULE_NAME_PREFIX}) set(MITK_MODULE_NAME_DEFAULTS_TO_DIRECTORY_NAME 1) #----------------------------------------------------------------------------- # Get MITK version info #----------------------------------------------------------------------------- mitkFunctionGetVersion(${MITK_SOURCE_DIR} MITK) mitkFunctionGetVersionDescription(${MITK_SOURCE_DIR} MITK) # MITK_VERSION set(MITK_VERSION_STRING "${MITK_VERSION_MAJOR}.${MITK_VERSION_MINOR}.${MITK_VERSION_PATCH}") if(MITK_VERSION_PATCH STREQUAL "99") set(MITK_VERSION_STRING "${MITK_VERSION_STRING}-${MITK_REVISION_SHORTID}") endif() #----------------------------------------------------------------------------- # Installation preparation # # These should be set before any MITK install macros are used #----------------------------------------------------------------------------- # on macOS all BlueBerry plugins get copied into every # application bundle (.app directory) specified here if(MITK_USE_BLUEBERRY AND APPLE) foreach(MITK_EXTENSION_DIR ${MITK_DIR_PLUS_EXTENSION_DIRS}) set(MITK_APPLICATIONS_EXTENSION_DIR "${MITK_EXTENSION_DIR}/Applications") if(EXISTS "${MITK_APPLICATIONS_EXTENSION_DIR}/AppList.cmake") set(MITK_APPS "") include("${MITK_APPLICATIONS_EXTENSION_DIR}/AppList.cmake") foreach(mitk_app ${MITK_APPS}) # extract option_name string(REPLACE "^^" "\\;" target_info ${mitk_app}) set(target_info_list ${target_info}) list(GET target_info_list 1 option_name) list(GET target_info_list 0 app_name) # check if the application is enabled if(${option_name} OR MITK_BUILD_ALL_APPS) set(MACOSX_BUNDLE_NAMES ${MACOSX_BUNDLE_NAMES} Mitk${app_name}) endif() endforeach() endif() endforeach() endif() #----------------------------------------------------------------------------- # Set coverage Flags #----------------------------------------------------------------------------- if(WITH_COVERAGE) if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") set(coverage_flags "-g -fprofile-arcs -ftest-coverage -O0 -DNDEBUG") set(COVERAGE_CXX_FLAGS ${coverage_flags}) set(COVERAGE_C_FLAGS ${coverage_flags}) endif() endif() #----------------------------------------------------------------------------- # MITK C/CXX Flags #----------------------------------------------------------------------------- set(MITK_C_FLAGS "${COVERAGE_C_FLAGS}") set(MITK_C_FLAGS_DEBUG ) set(MITK_C_FLAGS_RELEASE ) set(MITK_CXX_FLAGS "${COVERAGE_CXX_FLAGS} ${MITK_CXX${MITK_CXX_STANDARD}_FLAG}") set(MITK_CXX_FLAGS_DEBUG ) set(MITK_CXX_FLAGS_RELEASE ) set(MITK_EXE_LINKER_FLAGS ) set(MITK_SHARED_LINKER_FLAGS ) if(WIN32) set(MITK_CXX_FLAGS "${MITK_CXX_FLAGS} -DWIN32_LEAN_AND_MEAN -DNOMINMAX") mitkFunctionCheckCompilerFlags("/wd4005" MITK_CXX_FLAGS) # warning C4005: macro redefinition mitkFunctionCheckCompilerFlags("/wd4231" MITK_CXX_FLAGS) # warning C4231: nonstandard extension used : 'extern' before template explicit instantiation # the following line should be removed after fixing bug 17637 mitkFunctionCheckCompilerFlags("/wd4316" MITK_CXX_FLAGS) # warning C4316: object alignment on heap mitkFunctionCheckCompilerFlags("/wd4180" MITK_CXX_FLAGS) # warning C4180: qualifier applied to function type has no meaning mitkFunctionCheckCompilerFlags("/wd4251" MITK_CXX_FLAGS) # warning C4251: 'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2' endif() if(APPLE) set(MITK_CXX_FLAGS "${MITK_CXX_FLAGS} -DGL_SILENCE_DEPRECATION") # Apple deprecated OpenGL in macOS 10.14 endif() if(NOT MSVC_VERSION) foreach(_flag -Wall -Wextra -Wpointer-arith -Winvalid-pch -Wcast-align -Wwrite-strings -Wno-error=gnu -Wno-error=unknown-pragmas # The strict-overflow warning is generated by ITK template code -Wno-error=strict-overflow -Woverloaded-virtual -Wstrict-null-sentinel #-Wold-style-cast #-Wsign-promo -Wno-deprecated-copy -Wno-array-bounds -Wno-cast-function-type -Wno-maybe-uninitialized -Wno-error=stringop-overread -fdiagnostics-show-option ) mitkFunctionCheckCAndCXXCompilerFlags(${_flag} MITK_C_FLAGS MITK_CXX_FLAGS) endforeach() endif() if(CMAKE_COMPILER_IS_GNUCXX AND NOT APPLE) mitkFunctionCheckCompilerFlags("-Wl,--no-undefined" MITK_SHARED_LINKER_FLAGS) mitkFunctionCheckCompilerFlags("-Wl,--as-needed" MITK_SHARED_LINKER_FLAGS) endif() if(CMAKE_COMPILER_IS_GNUCXX) mitkFunctionCheckCAndCXXCompilerFlags("-fstack-protector-all" MITK_C_FLAGS MITK_CXX_FLAGS) set(MITK_CXX_FLAGS_RELEASE "-U_FORTIFY_SOURCES -D_FORTIFY_SOURCE=2 ${MITK_CXX_FLAGS_RELEASE}") endif() set(MITK_MODULE_LINKER_FLAGS ${MITK_SHARED_LINKER_FLAGS}) set(MITK_EXE_LINKER_FLAGS ${MITK_SHARED_LINKER_FLAGS}) #----------------------------------------------------------------------------- # MITK Packages #----------------------------------------------------------------------------- set(MITK_MODULES_PACKAGE_DEPENDS_DIR ${MITK_SOURCE_DIR}/CMake/PackageDepends) set(MODULES_PACKAGE_DEPENDS_DIRS ${MITK_MODULES_PACKAGE_DEPENDS_DIR}) foreach(MITK_EXTENSION_DIR ${MITK_ABSOLUTE_EXTENSION_DIRS}) set(MITK_PACKAGE_DEPENDS_EXTENSION_DIR "${MITK_EXTENSION_DIR}/CMake/PackageDepends") if(EXISTS "${MITK_PACKAGE_DEPENDS_EXTENSION_DIR}") list(APPEND MODULES_PACKAGE_DEPENDS_DIRS "${MITK_PACKAGE_DEPENDS_EXTENSION_DIR}") endif() endforeach() if(NOT MITK_USE_SYSTEM_Boost) set(Boost_NO_SYSTEM_PATHS 1) endif() set(Boost_USE_MULTITHREADED 1) set(Boost_USE_STATIC_LIBS 0) set(Boost_USE_STATIC_RUNTIME 0) set(Boost_ADDITIONAL_VERSIONS 1.74 1.74.0) # We need this later for a DCMTK workaround set(_dcmtk_dir_orig ${DCMTK_DIR}) # This property is populated at the top half of this file get_property(MITK_EXTERNAL_PROJECTS GLOBAL PROPERTY MITK_EXTERNAL_PROJECTS) foreach(ep ${MITK_EXTERNAL_PROJECTS}) get_property(_package GLOBAL PROPERTY MITK_${ep}_PACKAGE) get_property(_components GLOBAL PROPERTY MITK_${ep}_COMPONENTS) if(MITK_USE_${ep} AND _package) if(_components) find_package(${_package} COMPONENTS ${_components} REQUIRED CONFIG) else() # Prefer config mode first because it finds external # Config.cmake files pointed at by _DIR variables. # Otherwise, existing Find.cmake files could fail. if(DEFINED ${_package}_DIR) #we store the information because it will be overwritten by find_package #and would get lost for all EPs that use on Find.cmake instead of config #files. set(_temp_EP_${_package}_dir ${${_package}_DIR}) endif(DEFINED ${_package}_DIR) find_package(${_package} QUIET CONFIG) string(TOUPPER "${_package}" _package_uc) if(NOT (${_package}_FOUND OR ${_package_uc}_FOUND)) if(DEFINED _temp_EP_${_package}_dir) set(${_package}_DIR ${_temp_EP_${_package}_dir} CACHE PATH "externaly set dir of the package ${_package}" FORCE) endif(DEFINED _temp_EP_${_package}_dir) find_package(${_package} REQUIRED) endif() endif() endif() endforeach() # Ensure that the MITK CMake module path comes first set(CMAKE_MODULE_PATH ${MITK_CMAKE_DIR} ${CMAKE_MODULE_PATH} ) if(MITK_USE_DCMTK) if(${_dcmtk_dir_orig} MATCHES "${MITK_EXTERNAL_PROJECT_PREFIX}.*") # Help our FindDCMTK.cmake script find our super-build DCMTK set(DCMTK_DIR ${MITK_EXTERNAL_PROJECT_PREFIX}) else() # Use the original value set(DCMTK_DIR ${_dcmtk_dir_orig}) endif() endif() if(MITK_USE_DCMQI) # Due to the preferred CONFIG mode in find_package calls above, # the DCMQIConfig.cmake file is read, which does not provide useful # package information. We explictly need MODULE mode to find DCMQI. # Help our FindDCMQI.cmake script find our super-build DCMQI set(DCMQI_DIR ${MITK_EXTERNAL_PROJECT_PREFIX}) find_package(DCMQI REQUIRED) endif() if(MITK_USE_OpenIGTLink) link_directories(${OpenIGTLink_LIBRARY_DIRS}) endif() if(MITK_USE_OpenCL) find_package(OpenCL REQUIRED) endif() if(MITK_USE_OpenMP) find_package(OpenMP REQUIRED COMPONENTS CXX) else() find_package(OpenMP QUIET COMPONENTS CXX) if(OpenMP_FOUND) set(MITK_USE_OpenMP ON CACHE BOOL "" FORCE) elseif(APPLE AND OpenMP_libomp_LIBRARY AND NOT OpenMP_CXX_LIB_NAMES) set(OpenMP_CXX_LIB_NAMES libomp CACHE STRING "" FORCE) get_filename_component(openmp_lib_dir "${OpenMP_libomp_LIBRARY}" DIRECTORY) set(openmp_include_dir "${openmp_lib_dir}/../include") if(EXISTS "${openmp_include_dir}") get_filename_component(openmp_include_dir "${openmp_include_dir}" REALPATH) set(OpenMP_CXX_FLAGS "-Xpreprocessor -fopenmp -I${openmp_include_dir}" CACHE STRING "" FORCE) find_package(OpenMP QUIET COMPONENTS CXX) if(OpenMP_FOUND) set(MITK_USE_OpenMP ON CACHE BOOL "" FORCE) endif() endif() endif() endif() # Qt support if(MITK_USE_Qt5) find_package(Qt5Core ${MITK_QT5_MINIMUM_VERSION} REQUIRED) # at least Core required get_target_property(_qmake_exec Qt5::qmake LOCATION) execute_process(COMMAND ${_qmake_exec} -query QT_INSTALL_BINS RESULT_VARIABLE _result OUTPUT_VARIABLE QT_BINARY_DIR ERROR_VARIABLE _error ) string(STRIP "${QT_BINARY_DIR}" QT_BINARY_DIR) if(_result OR NOT EXISTS "${QT_BINARY_DIR}") message(FATAL_ERROR "Could not determine Qt binary directory: ${_result} ${QT_BINARY_DIR} ${_error}") endif() find_program(QT_HELPGENERATOR_EXECUTABLE NAMES qhelpgenerator qhelpgenerator-qt5 qhelpgenerator5 PATHS ${QT_BINARY_DIR} NO_DEFAULT_PATH ) find_program(QT_COLLECTIONGENERATOR_EXECUTABLE NAMES qcollectiongenerator qcollectiongenerator-qt5 qcollectiongenerator5 PATHS ${QT_BINARY_DIR} NO_DEFAULT_PATH ) find_program(QT_ASSISTANT_EXECUTABLE NAMES assistant assistant-qt5 assistant5 PATHS ${QT_BINARY_DIR} NO_DEFAULT_PATH ) find_program(QT_XMLPATTERNS_EXECUTABLE NAMES xmlpatterns PATHS ${QT_BINARY_DIR} NO_DEFAULT_PATH ) mark_as_advanced(QT_HELPGENERATOR_EXECUTABLE QT_COLLECTIONGENERATOR_EXECUTABLE QT_ASSISTANT_EXECUTABLE QT_XMLPATTERNS_EXECUTABLE ) if(MITK_USE_BLUEBERRY) option(BLUEBERRY_USE_QT_HELP "Enable support for integrating plugin documentation into Qt Help" ${DOXYGEN_FOUND}) mark_as_advanced(BLUEBERRY_USE_QT_HELP) # Sanity checks for in-application BlueBerry plug-in help generation if(BLUEBERRY_USE_QT_HELP) set(_force_blueberry_use_qt_help_to_off 0) if(NOT DOXYGEN_FOUND) message("> Forcing BLUEBERRY_USE_QT_HELP to OFF because Doxygen was not found.") set(_force_blueberry_use_qt_help_to_off 1) endif() if(DOXYGEN_FOUND AND DOXYGEN_VERSION VERSION_LESS 1.8.7) message("> Forcing BLUEBERRY_USE_QT_HELP to OFF because Doxygen version 1.8.7 or newer not found.") set(_force_blueberry_use_qt_help_to_off 1) endif() if(NOT QT_HELPGENERATOR_EXECUTABLE) message("> Forcing BLUEBERRY_USE_QT_HELP to OFF because QT_HELPGENERATOR_EXECUTABLE is empty.") set(_force_blueberry_use_qt_help_to_off 1) endif() if(NOT MITK_USE_Qt5) message("> Forcing BLUEBERRY_USE_QT_HELP to OFF because MITK_USE_Qt5 is OFF.") set(_force_blueberry_use_qt_help_to_off 1) endif() if(NOT QT_XMLPATTERNS_EXECUTABLE) message("You have enabled Qt Help support, but QT_XMLPATTERNS_EXECUTABLE is empty") set(_force_blueberry_use_qt_help_to_off 1) endif() if(_force_blueberry_use_qt_help_to_off) set(BLUEBERRY_USE_QT_HELP OFF CACHE BOOL "Enable support for integrating plugin documentation into Qt Help" FORCE) endif() endif() if(BLUEBERRY_QT_HELP_REQUIRED AND NOT BLUEBERRY_USE_QT_HELP) message(FATAL_ERROR "BLUEBERRY_USE_QT_HELP is required to be set to ON") endif() endif() endif() #----------------------------------------------------------------------------- # Testing #----------------------------------------------------------------------------- if(BUILD_TESTING) - #[[ See T27701 - # Initial cache for ProjectTemplate and PluginGenerator tests - configure_file( - CMake/mitkTestInitialCache.txt.in - ${MITK_BINARY_DIR}/mitkTestInitialCache.txt - @ONLY - )]] - # Configuration for the CMake-generated test driver set(CMAKE_TESTDRIVER_EXTRA_INCLUDES "#include ") set(CMAKE_TESTDRIVER_BEFORE_TESTMAIN " try {") set(CMAKE_TESTDRIVER_AFTER_TESTMAIN " } catch (const std::exception& e) { fprintf(stderr, \"%s\\n\", e.what()); return EXIT_FAILURE; } catch (...) { printf(\"Exception caught in the test driver\\n\"); return EXIT_FAILURE; }") set(MITK_TEST_OUTPUT_DIR "${MITK_BINARY_DIR}/test_output") if(NOT EXISTS ${MITK_TEST_OUTPUT_DIR}) file(MAKE_DIRECTORY ${MITK_TEST_OUTPUT_DIR}) endif() # Test the package target include(mitkPackageTest) endif() configure_file(mitkTestingConfig.h.in ${MITK_BINARY_DIR}/mitkTestingConfig.h) #----------------------------------------------------------------------------- # MITK_SUPERBUILD_BINARY_DIR #----------------------------------------------------------------------------- # If MITK_SUPERBUILD_BINARY_DIR isn't defined, it means MITK is *NOT* build using Superbuild. # In that specific case, MITK_SUPERBUILD_BINARY_DIR should default to MITK_BINARY_DIR if(NOT DEFINED MITK_SUPERBUILD_BINARY_DIR) set(MITK_SUPERBUILD_BINARY_DIR ${MITK_BINARY_DIR}) endif() #----------------------------------------------------------------------------- # Set C/CXX and linker flags for MITK code #----------------------------------------------------------------------------- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MITK_CXX_FLAGS}") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${MITK_CXX_FLAGS_DEBUG}") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${MITK_CXX_FLAGS_RELEASE}") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MITK_C_FLAGS}") set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${MITK_C_FLAGS_DEBUG}") set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${MITK_C_FLAGS_RELEASE}") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${MITK_EXE_LINKER_FLAGS}") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${MITK_SHARED_LINKER_FLAGS}") set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${MITK_MODULE_LINKER_FLAGS}") #----------------------------------------------------------------------------- # Add subdirectories #----------------------------------------------------------------------------- add_subdirectory(Utilities) add_subdirectory(Modules) include("${CMAKE_CURRENT_SOURCE_DIR}/Modules/ModuleList.cmake") mitkFunctionWhitelistModules(MITK MITK_MODULES) set(MITK_ROOT_FOLDER_BACKUP "${MITK_ROOT_FOLDER}") foreach(MITK_EXTENSION_DIR ${MITK_ABSOLUTE_EXTENSION_DIRS}) get_filename_component(MITK_ROOT_FOLDER "${MITK_EXTENSION_DIR}" NAME) set(MITK_MODULES_EXTENSION_DIR "${MITK_EXTENSION_DIR}/Modules") if(EXISTS "${MITK_MODULES_EXTENSION_DIR}/ModuleList.cmake") set(MITK_MODULES "") include("${MITK_MODULES_EXTENSION_DIR}/ModuleList.cmake") foreach(mitk_module ${MITK_MODULES}) add_subdirectory("${MITK_MODULES_EXTENSION_DIR}/${mitk_module}" "Modules/${mitk_module}") endforeach() endif() set(MITK_MODULE_NAME_PREFIX ${MITK_DEFAULT_MODULE_NAME_PREFIX}) endforeach() set(MITK_ROOT_FOLDER "${MITK_ROOT_FOLDER_BACKUP}") add_subdirectory(Wrapping) set(MITK_DOXYGEN_OUTPUT_DIR "${PROJECT_BINARY_DIR}/Documentation/Doxygen" CACHE PATH "Output directory for doxygen generated documentation.") if(MITK_USE_BLUEBERRY) include("${CMAKE_CURRENT_SOURCE_DIR}/Plugins/PluginList.cmake") mitkFunctionWhitelistPlugins(MITK MITK_PLUGINS) set(mitk_plugins_fullpath "") foreach(mitk_plugin ${MITK_PLUGINS}) list(APPEND mitk_plugins_fullpath Plugins/${mitk_plugin}) endforeach() set(MITK_PLUGIN_REGEX_LIST "") foreach(MITK_EXTENSION_DIR ${MITK_ABSOLUTE_EXTENSION_DIRS}) set(MITK_PLUGINS_EXTENSION_DIR "${MITK_EXTENSION_DIR}/Plugins") if(EXISTS "${MITK_PLUGINS_EXTENSION_DIR}/PluginList.cmake") set(MITK_PLUGINS "") include("${MITK_PLUGINS_EXTENSION_DIR}/PluginList.cmake") foreach(mitk_plugin ${MITK_PLUGINS}) list(APPEND mitk_plugins_fullpath "${MITK_PLUGINS_EXTENSION_DIR}/${mitk_plugin}") endforeach() endif() endforeach() if(EXISTS ${MITK_PRIVATE_MODULES}/PluginList.cmake) include(${MITK_PRIVATE_MODULES}/PluginList.cmake) foreach(mitk_plugin ${MITK_PRIVATE_PLUGINS}) list(APPEND mitk_plugins_fullpath ${MITK_PRIVATE_MODULES}/${mitk_plugin}) endforeach() endif() if(MITK_BUILD_EXAMPLES) include("${CMAKE_CURRENT_SOURCE_DIR}/Examples/Plugins/PluginList.cmake") set(mitk_example_plugins_fullpath ) foreach(mitk_example_plugin ${MITK_EXAMPLE_PLUGINS}) list(APPEND mitk_example_plugins_fullpath Examples/Plugins/${mitk_example_plugin}) list(APPEND mitk_plugins_fullpath Examples/Plugins/${mitk_example_plugin}) endforeach() endif() # Specify which plug-ins belong to this project macro(GetMyTargetLibraries all_target_libraries varname) set(re_ctkplugin_mitk "^org_mitk_[a-zA-Z0-9_]+$") set(re_ctkplugin_bb "^org_blueberry_[a-zA-Z0-9_]+$") set(_tmp_list) list(APPEND _tmp_list ${all_target_libraries}) ctkMacroListFilter(_tmp_list re_ctkplugin_mitk re_ctkplugin_bb MITK_PLUGIN_REGEX_LIST OUTPUT_VARIABLE ${varname}) endmacro() # Get infos about application directories and build options set(mitk_apps_fullpath "") foreach(MITK_EXTENSION_DIR ${MITK_DIR_PLUS_EXTENSION_DIRS}) set(MITK_APPLICATIONS_EXTENSION_DIR "${MITK_EXTENSION_DIR}/Applications") if(EXISTS "${MITK_APPLICATIONS_EXTENSION_DIR}/AppList.cmake") set(MITK_APPS "") include("${MITK_APPLICATIONS_EXTENSION_DIR}/AppList.cmake") foreach(mitk_app ${MITK_APPS}) # extract option_name string(REPLACE "^^" "\\;" target_info ${mitk_app}) set(target_info_list ${target_info}) list(GET target_info_list 0 directory_name) list(GET target_info_list 1 option_name) if(${option_name}) list(APPEND mitk_apps_fullpath "${MITK_APPLICATIONS_EXTENSION_DIR}/${directory_name}^^${option_name}") endif() endforeach() endif() endforeach() if (mitk_plugins_fullpath) ctkMacroSetupPlugins(${mitk_plugins_fullpath} BUILD_OPTION_PREFIX MITK_BUILD_ APPS ${mitk_apps_fullpath} BUILD_ALL ${MITK_BUILD_ALL_PLUGINS} COMPACT_OPTIONS) endif() set(MITK_PLUGIN_USE_FILE "${MITK_BINARY_DIR}/MitkPluginUseFile.cmake") if(${PROJECT_NAME}_PLUGIN_LIBRARIES) ctkFunctionGeneratePluginUseFile(${MITK_PLUGIN_USE_FILE}) else() file(REMOVE ${MITK_PLUGIN_USE_FILE}) set(MITK_PLUGIN_USE_FILE ) endif() endif() #----------------------------------------------------------------------------- # Documentation #----------------------------------------------------------------------------- set(MITK_DOXYGEN_ADDITIONAL_INPUT_DIRS) set(MITK_DOXYGEN_ADDITIONAL_IMAGE_PATHS) foreach(MITK_EXTENSION_DIR ${MITK_DIR_PLUS_EXTENSION_DIRS}) set(MITK_DOXYGEN_ADDITIONAL_INPUT_DIRS "${MITK_DOXYGEN_ADDITIONAL_INPUT_DIRS} \"${MITK_EXTENSION_DIR}\"") set(MITK_DOXYGEN_ADDITIONAL_IMAGE_PATHS "${MITK_DOXYGEN_ADDITIONAL_IMAGE_PATHS} \"${MITK_EXTENSION_DIR}\"") endforeach() if(DOXYGEN_FOUND) add_subdirectory(Documentation) endif() #----------------------------------------------------------------------------- # Installation #----------------------------------------------------------------------------- # set MITK cpack variables # These are the default variables, which can be overwritten ( see below ) include(mitkSetupCPack) set(use_default_config ON) set(ALL_MITK_APPS "") set(activated_apps_no 0) foreach(MITK_EXTENSION_DIR ${MITK_DIR_PLUS_EXTENSION_DIRS}) set(MITK_APPLICATIONS_EXTENSION_DIR "${MITK_EXTENSION_DIR}/Applications") if(EXISTS "${MITK_APPLICATIONS_EXTENSION_DIR}/AppList.cmake") set(MITK_APPS "") include("${MITK_APPLICATIONS_EXTENSION_DIR}/AppList.cmake") foreach(mitk_app ${MITK_APPS}) string(REPLACE "^^" "\\;" target_info ${mitk_app}) set(target_info_list ${target_info}) list(GET target_info_list 0 directory_name) list(GET target_info_list 1 option_name) list(GET target_info_list 2 executable_name) list(APPEND ALL_MITK_APPS "${MITK_EXTENSION_DIR}/Applications/${directory_name}^^${option_name}^^${executable_name}") if(${option_name} OR MITK_BUILD_ALL_APPS) MATH(EXPR activated_apps_no "${activated_apps_no} + 1") endif() endforeach() endif() endforeach() list(LENGTH ALL_MITK_APPS app_count) if(app_count EQUAL 1 AND (activated_apps_no EQUAL 1 OR MITK_BUILD_ALL_APPS)) # Corner case if there is only one app in total set(use_project_cpack ON) elseif(activated_apps_no EQUAL 1 AND NOT MITK_BUILD_ALL_APPS) # Only one app is enabled (no "build all" flag set) set(use_project_cpack ON) else() # Less or more then one app is enabled set(use_project_cpack OFF) endif() foreach(mitk_app ${ALL_MITK_APPS}) # extract target_dir and option_name string(REPLACE "^^" "\\;" target_info ${mitk_app}) set(target_info_list ${target_info}) list(GET target_info_list 0 target_dir) list(GET target_info_list 1 option_name) list(GET target_info_list 2 executable_name) # check if the application is enabled if(${option_name} OR MITK_BUILD_ALL_APPS) # check whether application specific configuration files will be used if(use_project_cpack) # use files if they exist if(EXISTS "${target_dir}/CPackOptions.cmake") include("${target_dir}/CPackOptions.cmake") endif() if(EXISTS "${target_dir}/CPackConfig.cmake.in") set(CPACK_PROJECT_CONFIG_FILE "${target_dir}/CPackConfig.cmake") configure_file(${target_dir}/CPackConfig.cmake.in ${CPACK_PROJECT_CONFIG_FILE} @ONLY) set(use_default_config OFF) endif() endif() # add link to the list list(APPEND CPACK_CREATE_DESKTOP_LINKS "${executable_name}") endif() endforeach() # if no application specific configuration file was used, use default if(use_default_config) configure_file(${MITK_SOURCE_DIR}/MITKCPackOptions.cmake.in ${MITK_BINARY_DIR}/MITKCPackOptions.cmake @ONLY) set(CPACK_PROJECT_CONFIG_FILE "${MITK_BINARY_DIR}/MITKCPackOptions.cmake") endif() # include CPack model once all variables are set include(CPack) # Additional installation rules include(mitkInstallRules) #----------------------------------------------------------------------------- # Last configuration steps #----------------------------------------------------------------------------- # ---------------- Export targets ----------------- set(MITK_EXPORTS_FILE "${MITK_BINARY_DIR}/MitkExports.cmake") file(REMOVE ${MITK_EXPORTS_FILE}) set(targets_to_export) get_property(module_targets GLOBAL PROPERTY MITK_MODULE_TARGETS) if(module_targets) list(APPEND targets_to_export ${module_targets}) endif() if(MITK_USE_BLUEBERRY) if(MITK_PLUGIN_LIBRARIES) list(APPEND targets_to_export ${MITK_PLUGIN_LIBRARIES}) endif() endif() export(TARGETS ${targets_to_export} APPEND FILE ${MITK_EXPORTS_FILE}) set(MITK_EXPORTED_TARGET_PROPERTIES ) foreach(target_to_export ${targets_to_export}) get_target_property(autoload_targets ${target_to_export} MITK_AUTOLOAD_TARGETS) if(autoload_targets) set(MITK_EXPORTED_TARGET_PROPERTIES "${MITK_EXPORTED_TARGET_PROPERTIES} set_target_properties(${target_to_export} PROPERTIES MITK_AUTOLOAD_TARGETS \"${autoload_targets}\")") endif() get_target_property(autoload_dir ${target_to_export} MITK_AUTOLOAD_DIRECTORY) if(autoload_dir) set(MITK_EXPORTED_TARGET_PROPERTIES "${MITK_EXPORTED_TARGET_PROPERTIES} set_target_properties(${target_to_export} PROPERTIES MITK_AUTOLOAD_DIRECTORY \"${autoload_dir}\")") endif() get_target_property(deprecated_module ${target_to_export} MITK_MODULE_DEPRECATED_SINCE) if(deprecated_module) set(MITK_EXPORTED_TARGET_PROPERTIES "${MITK_EXPORTED_TARGET_PROPERTIES} set_target_properties(${target_to_export} PROPERTIES MITK_MODULE_DEPRECATED_SINCE \"${deprecated_module}\")") endif() endforeach() # ---------------- External projects ----------------- get_property(MITK_ADDITIONAL_LIBRARY_SEARCH_PATHS_CONFIG GLOBAL PROPERTY MITK_ADDITIONAL_LIBRARY_SEARCH_PATHS) set(MITK_CONFIG_EXTERNAL_PROJECTS ) #string(REPLACE "^^" ";" _mitk_external_projects ${MITK_EXTERNAL_PROJECTS}) foreach(ep ${MITK_EXTERNAL_PROJECTS}) get_property(_components GLOBAL PROPERTY MITK_${ep}_COMPONENTS) set(MITK_CONFIG_EXTERNAL_PROJECTS "${MITK_CONFIG_EXTERNAL_PROJECTS} set(MITK_USE_${ep} ${MITK_USE_${ep}}) set(MITK_${ep}_DIR \"${${ep}_DIR}\") set(MITK_${ep}_COMPONENTS ${_components}) ") endforeach() foreach(ep ${MITK_EXTERNAL_PROJECTS}) get_property(_package GLOBAL PROPERTY MITK_${ep}_PACKAGE) get_property(_components GLOBAL PROPERTY MITK_${ep}_COMPONENTS) if(_components) set(_components_arg COMPONENTS \${_components}) else() set(_components_arg) endif() if(_package) set(MITK_CONFIG_EXTERNAL_PROJECTS "${MITK_CONFIG_EXTERNAL_PROJECTS} if(MITK_USE_${ep}) set(${ep}_DIR \${MITK_${ep}_DIR}) if(MITK_${ep}_COMPONENTS) mitkMacroFindDependency(${_package} COMPONENTS \${MITK_${ep}_COMPONENTS}) else() mitkMacroFindDependency(${_package}) endif() endif()") endif() endforeach() # ---------------- Tools ----------------- configure_file(${MITK_SOURCE_DIR}/CMake/ToolExtensionITKFactory.cpp.in ${MITK_BINARY_DIR}/ToolExtensionITKFactory.cpp.in COPYONLY) configure_file(${MITK_SOURCE_DIR}/CMake/ToolExtensionITKFactoryLoader.cpp.in ${MITK_BINARY_DIR}/ToolExtensionITKFactoryLoader.cpp.in COPYONLY) configure_file(${MITK_SOURCE_DIR}/CMake/ToolGUIExtensionITKFactory.cpp.in ${MITK_BINARY_DIR}/ToolGUIExtensionITKFactory.cpp.in COPYONLY) # ---------------- Configure files ----------------- configure_file(mitkVersion.h.in ${MITK_BINARY_DIR}/mitkVersion.h) configure_file(mitkConfig.h.in ${MITK_BINARY_DIR}/mitkConfig.h) set(IPFUNC_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Utilities/ipFunc) set(UTILITIES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Utilities) configure_file(mitkConfig.h.in ${MITK_BINARY_DIR}/mitkConfig.h) configure_file(MITKConfig.cmake.in ${MITK_BINARY_DIR}/MITKConfig.cmake @ONLY) write_basic_config_version_file(${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake VERSION ${MITK_VERSION_STRING} COMPATIBILITY AnyNewerVersion) #----------------------------------------------------------------------------- # MITK Applications #----------------------------------------------------------------------------- # This must come after MITKConfig.h was generated, since applications # might do a find_package(MITK REQUIRED). add_subdirectory(Applications) if(MSVC AND TARGET MitkWorkbench) set_directory_properties(PROPERTIES VS_STARTUP_PROJECT MitkWorkbench) endif() foreach(MITK_EXTENSION_DIR ${MITK_ABSOLUTE_EXTENSION_DIRS}) set(MITK_APPLICATIONS_EXTENSION_DIR "${MITK_EXTENSION_DIR}/Applications") if(EXISTS "${MITK_APPLICATIONS_EXTENSION_DIR}/CMakeLists.txt") add_subdirectory("${MITK_APPLICATIONS_EXTENSION_DIR}" "Applications") endif() endforeach() #----------------------------------------------------------------------------- # MITK Examples #----------------------------------------------------------------------------- if(MITK_BUILD_EXAMPLES) # This must come after MITKConfig.h was generated, since applications # might do a find_package(MITK REQUIRED). add_subdirectory(Examples) endif() #----------------------------------------------------------------------------- # Print configuration summary #----------------------------------------------------------------------------- message("\n\n") feature_summary( DESCRIPTION "------- FEATURE SUMMARY FOR ${PROJECT_NAME} -------" WHAT ALL ) diff --git a/Documentation/Doxygen/3-DeveloperManual/Concepts/Concepts.dox b/Documentation/Doxygen/3-DeveloperManual/Concepts/Concepts.dox index 9c9306d6b5..ef6f9c5bfa 100644 --- a/Documentation/Doxygen/3-DeveloperManual/Concepts/Concepts.dox +++ b/Documentation/Doxygen/3-DeveloperManual/Concepts/Concepts.dox @@ -1,32 +1,31 @@ /** \page Concepts MITK Concepts The following items describe some issues about MITK on a more abstract level. -# \subpage CodingPage "Coding Concepts" -# \ref CodingPageGeneral -# \ref CodingPageStyle -# \ref CodingPageMITKMacros -# \subpage MicroServices_Overview -# Data Concepts -# \subpage BasicDataTypesPage -# \subpage DataManagementPage -# \subpage ReaderWriterPage -# \subpage MitkImagePage -# \subpage MITKSegmentationTaskListsPage -# \subpage PropertiesPage -# \subpage GeometryOverviewPage -# \subpage PipelineingConceptPage -# \subpage AnnotationPage -# \subpage PersistenceConceptPage -# \subpage SelectionConceptPage -# \subpage QVTKRendering -# Interaction -# \subpage DataInteractionPage -# \subpage InteractionPage -# \subpage LoggingPage -# \subpage ExceptionPage -# \subpage ModularizationPage "Modularization Concept" -# \ref ModularizationPageOverview - -# \ref ModularizationPageHowTo */ diff --git a/Documentation/Doxygen/3-DeveloperManual/Concepts/Modularization.dox b/Documentation/Doxygen/3-DeveloperManual/Concepts/Modularization.dox index 32fd931e28..301ec11aed 100644 --- a/Documentation/Doxygen/3-DeveloperManual/Concepts/Modularization.dox +++ b/Documentation/Doxygen/3-DeveloperManual/Concepts/Modularization.dox @@ -1,44 +1,39 @@ /** \page ModularizationPage Modular MITK MITK has been designed to be modular and flexible, to facilitate reuse of existing code and functionality if possible. As such there are several levels of modularization which can be chosen when working with MITK, depending on the use case. \section ModularizationPageOverview Overview The general hierarchy of modularization runs micro service, module, view, plug-in, perspective and finally application. \subsection ModularizationPageMicroServices Micro Services A \ref MicroServices_Overview "micro service" is a reusable component provided by MITK modules. It can be accessed by other MITK modules or MITK plug-ins via its declared interface. \subsection ModularizationPageModules Modules Modules can be found in the MITK/Modules directory (with the exception of the core module in MITK/Core). Each module is a shared library that provides algorithms, data structures and similar code. Many modules are gui independent. A module is only build if it is required by other code, e.g. if a plug-ins is activated that requires it. \subsection ModularizationPageViews Views One of the smallest units in the MITK application framework is a \e view. A view is always part of a plug-in and provides one specific function, such as grouping all gui elements needed for providing segmentation algorithms or loading dicom images. Views usually contain any code which communicates with the user, performs input checking and similar, but no advanced algorithms. \subsection ModularizationPagePlugInBundles Plugins The next smallest unit is a CTK Plug-in (the term \e Bundle is used interchangeably). They can be found in MITK/Plugins or MITK/BlueBerry/Bundles. Plugins can be individually switched on and off during the CMake configuration. A plugin usually represents a solution to a specific problem, such as segmentation or data management. As such they may provide any number of views and other contributions to the MITK application framework. -If you want to create your own MITK plugin you find further information \ref NewPluginPage "here". - \subsection ModularizationPagePerspectives Perspectives Perspectives represent a configuration for the MITK application framework (specifically, for the \e Workbench) needed for a specific workflow. They allow the arrangement of different views (contributed by different plug-ins) to reflect the usage scenario, such as a data loading view in the top right, a segmentation view to the right and a visualization view to the bottom right. A perspective is provided by arbitrary plug-ins as an extension (contribution) to the application framework. \subsection ModularizationPageApplications Applications A specific selection of plug-ins together with custom configuration data defines the functionality for an application. The application corresponds to an executable and enables very specific program behaviour and configuration. Example applications can be found in the MITK/Applications directory. -\section ModularizationPageHowTo How to create your own application - -It is suggested to use the project generator provided by MITK unless one knows what one is doing. See \ref NewPluginWithProject "here" for more information. */ diff --git a/Documentation/Doxygen/3-DeveloperManual/Starting/FirstSteps/FirstSteps.dox b/Documentation/Doxygen/3-DeveloperManual/Starting/FirstSteps/FirstSteps.dox index c85df71692..de1f1c8872 100644 --- a/Documentation/Doxygen/3-DeveloperManual/Starting/FirstSteps/FirstSteps.dox +++ b/Documentation/Doxygen/3-DeveloperManual/Starting/FirstSteps/FirstSteps.dox @@ -1,15 +1,14 @@ /** \page FirstSteps First steps in Development This section will show you how to extend MITK for your own project.
    -
  • \subpage NewPluginPage
  • \subpage NewModulePage
  • \subpage NewDataTypePage
  • \subpage NewViewPage
  • \subpage CMAKE_FAQ
  • \subpage MiniAppCommandLineToolHowToPage
*/ diff --git a/Documentation/Doxygen/3-DeveloperManual/Starting/FirstSteps/NewPlugin.dox b/Documentation/Doxygen/3-DeveloperManual/Starting/FirstSteps/NewPlugin.dox deleted file mode 100644 index 8b5ffda3e2..0000000000 --- a/Documentation/Doxygen/3-DeveloperManual/Starting/FirstSteps/NewPlugin.dox +++ /dev/null @@ -1,96 +0,0 @@ -/** -\page NewPluginPage How to create a new MITK Plugin - -The MITK Plugin Generator is a command line tool to simplify the process of creating your own MITK project -(optional) and plugins. - -The Plugin Generator takes the following command line arguments: - -\verbatim -./MitkPluginGenerator -h -A CTK plugin generator for MITK (version 1.2.0) - - -h, --help Show this help text - -o, --out-dir Output directory (default: /tmp) - -l, --license Path to a file containing license information (default: :/COPYRIGHT_HEADER) - -v, --vendor The vendor of the generated code (default: German Cancer Research Center (DKFZ)) - -q, --quiet Do not print additional information - -y, --confirm-all Answer all questions with 'yes' - -u, --check-update Check for updates and exit - -n, --no-networking Disable all network requests - -Plugin View options - -vc, --view-class The View's' class name - -vn, --view-name * The View's human readable name - -Plugin options - -ps, --plugin-symbolic-name * The plugin's symbolic name - -pn, --plugin-name The plugin's human readable name - -Project options - --project-copyright Path to a file containing copyright information (default: :/LICENSE) - --project-name The project name - --project-app-name The application name - -[* - options are required] -\endverbatim - -If a project name is provided via the --project-name argument, the new plugin will be generated -as part of a new project. - -\section NewPluginOnly Creating a new MITK plugin - -Here is an example call to the Plugin Generator, creating one plugin with the symbolic name -com.mycompany.myplugin and a View named My View: - -\verbatim -./MitkPluginGenerator --plugin-symbolic-name org.mycompany.myplugin --view-name "My View" -\endverbatim - -If you did not already specify the final location of the plugin via the --out-dir argument, move the -directory (in our example /tmp/org.mycompany.myplugin) to your existing project. Do not forget to add the -plugin in your project's build system (usually in the file <your-project>/Plugins/Plugins.cmake). - -\section NewPluginWithProject Creating a new MITK project - -\subsection NewPluginProjectPrerequisites Prerequisites - -MITK-based projects created with the Plugin Generator need the same prerequisites as MITK itself. See the -\ref BuildInstructionsPage for MITK for details. - -Here is an example call to the Plugin Generator, creating the same plugin as above but integrated in a new project: - -\verbatim -./MitkPluginGenerator --plugin-symbolic-name org.mycompany.myplugin --view-name "My View" --project-name "MyProject" --project-app-name "MyApp" -\endverbatim - -The generated project is completely self-contained and can be configured via CMake immediately. When building the -generated project, it will first download all required dependencies (like MITK itself). For an explanation of the -project's build directory layout and how to configure MITK from your project's superbuild CMake configuration, -see \ref HowToNewProject. - - -\subsection NewPluginLimitations Limitations - -The Plugin Generator supports only a very limited set of possible configuration options. For more customizations of your -project or plugin, you must familiarize yourself with CMake and the generated build system. - -Further, the generator is not able to modify existing projects, it can only create new ones. - - -\section NewPluginBuildSystem Build system for plugins - -Just put new files in your plugin's \c src or \c src/internal directory and edit the \c files.cmake file there. -If you have any fancy stuff like external libraries and include directories you should have a look at the CMake manual and general MITK build system documentation. - - -\section NewPluginTroubleshooting Troubleshooting - -\par I get "Could not find library" messages and similar stuff when I try to start my project's executable. -This is mostly due to wrong environment settings. On Windows, make sure that you use the supplied batch files to start -Visual Studio or your project's executable. If you still get errors, double check the value of the PATH variable in -your batch files (it must contain MITK's binary directory and paths to the ITK, VTK and Qt libraries. - -\par -On Linux, set your LD_LIBRARY_PATH variable accordingly. -*/ diff --git a/Documentation/Doxygen/3-DeveloperManual/Starting/FirstSteps/NewView.dox b/Documentation/Doxygen/3-DeveloperManual/Starting/FirstSteps/NewView.dox index 8797dc3e3d..db94574add 100644 --- a/Documentation/Doxygen/3-DeveloperManual/Starting/FirstSteps/NewView.dox +++ b/Documentation/Doxygen/3-DeveloperManual/Starting/FirstSteps/NewView.dox @@ -1,50 +1,50 @@ /** \page NewViewPage Adding a new view to a MITK Plugin -A plugin can bundle several views. If you want to extend an existing plugin, for example created as in \ref NewPluginPage, by an additional view, you only need to adapt a few files. +A plugin can bundle several views. If you want to extend an existing plugin by an additional view, you only need to adapt a few files. This guide will give you a quick overview of what to do. We assume you are adding the view "Useful Functions View" and use default file names and locations (relative to your plugin folder root). \section NewViewPageFilesToAdd Files to add For a basic view you will have to add the following files (assuming you do not share any icons or other resources):
  • src/internal/%QmitkUsefulFunctionsView.h
  • src/internal/%QmitkUsefulFunctionsView.cpp
    remember to set an id for your view \code const std::string QmitkUsefulFunctionsView::VIEW_ID = "org.mitk.views.usefulfunctions"; \endcode
  • src/internal/%QmitkUsefulFunctionsViewControls.ui
  • resources/%UsefulFunctionsViewIcon.png
  • documentation/%UserManual/%QmitkUsefulFunctionsViewUserManual.dox
    Use your view id as page id to be found using the F1 help \code \page org_mitk_views_usefulfunctions The Useful Functions View \endcode
\section NewViewPageFilesChanged Files to change The following files need to be adapted:
  • files.cmake
    • Add "src/internal/QmitkUsefulFunctionsView.cpp" to set(INTERNAL_CPP_FILES )
    • Add "src/internal/QmitkUsefulFunctionsViewControls.ui" to set(UI_FILES )
    • Add "src/internal/QmitkUsefulFunctionsView.h" to set(MOC_H_FILES )
    • Add "resources/UsefulFunctionsViewIcon.png" to set(CACHED_RESOURCE_FILES )
  • plugin.xml
    Add an extension point for your new view \code \endcode
-*/ \ No newline at end of file +*/ diff --git a/Documentation/Doxygen/3-DeveloperManual/Starting/GettingToKnow/CMakeFAQ.dox b/Documentation/Doxygen/3-DeveloperManual/Starting/GettingToKnow/CMakeFAQ.dox index de0cfad7a0..eb1e126554 100644 --- a/Documentation/Doxygen/3-DeveloperManual/Starting/GettingToKnow/CMakeFAQ.dox +++ b/Documentation/Doxygen/3-DeveloperManual/Starting/GettingToKnow/CMakeFAQ.dox @@ -1,44 +1,44 @@ /** \page CMAKE_FAQ CMake FAQ \section CMAKE_FAQ_General A general comment MITK uses %CMake for configuration. If you want to develop either using MITK as a toolkit or by extending the capabilities of the applications provided by us, we recommend using %CMake for your own project too. While it might be possible to use MITK in conjunction with other options, such as QMake or setting up your own project manually it will invariably involve a lot of work and probably hacks as well. As we do have no experience with this, we will not be able to help you. Be prepared to do a lot of tweaking on by yourself. This guide does not try to give a general introduction to CMake, instead it tries to answer some basic questions that might arise for those new to %CMake, to help you get started on MITK. For a more comprehensive introduction on %CMake see here. We will assume in this guide, that the path to your source is /MITK/. \section CMAKE_FAQ_Question Basic Questions \subsection CMAKE_FAQ_Question_WhereGetIt Where do I get CMake and what version do I need? See \ref BuildInstructions_Prerequisites. \subsection CMAKE_FAQ_Question_NewPluginNothing I coded a new plugin for the Workbench and nothing happened. Why? -The correct way to create a new plugin is described in \ref NewPluginOnly. Do note that you need to move the source to the MITK/Plugins directory and you will have to add the plugin to the config file (most likely MITK/Plugins/Plugins.cmake). After that see \ref CMAKE_FAQ_Question_HowDoIActivatePlugin. +Do note that you need to move the source to the Plugins directory and you will have to add the plugin to the config file (most likely Plugins/PluginList.cmake). After that see \ref CMAKE_FAQ_Question_HowDoIActivatePlugin. \subsection CMAKE_FAQ_Question_HowDoIActivatePlugin I want to use a plugin, how do I activate it?
  1. Start %CMake in the `MITK-build` directory inside your superbuild folder. E.g. `cd ~//MITK-build` `ccmake .` or `cmake-gui .`
  2. Optional: *Configure* to see all %CMake variables.
  3. Find the variable `MITK_BUILD_` and activate it. The `` refers to the package name of the plugin.
    E.g. the plugin-id (also, the package name) `org.mitk.core.ext` is the sub-directory of same name in plugins directory (`~/MITK/Plugins/`).
  4. *Configure*, again
  5. *Generate*
  6. Rebuild the `MITK-build` target using your development environment.
\subsection CMAKE_FAQ_Question_HowDoIActivateModule I want to use a module, how do I activate it? Modules are build automatically if a plugin that requires them is activated. See \ref CMAKE_FAQ_Question_HowDoIActivatePlugin. \subsection CMAKE_FAQ_Question_HowOwnToolkits MITK always downloads the toolkits, but I want to use my own. This is covered in \ref HowToNewProjectCustomizingMITKConfigure. \subsection CMAKE_FAQ_Question_HowOwnProjectMITK I want to use an MITK plugin in my own project but I can not find it. See \ref HowToNewProjectAddingMITKFunctionality. */ diff --git a/Documentation/Doxygen/3-DeveloperManual/Starting/GettingToKnow/Tutorial/Step09.dox b/Documentation/Doxygen/3-DeveloperManual/Starting/GettingToKnow/Tutorial/Step09.dox index e3da27c87c..be5ba22d77 100644 --- a/Documentation/Doxygen/3-DeveloperManual/Starting/GettingToKnow/Tutorial/Step09.dox +++ b/Documentation/Doxygen/3-DeveloperManual/Starting/GettingToKnow/Tutorial/Step09.dox @@ -1,80 +1,75 @@ /** \page Step09Page MITK Tutorial - Step 9: A plug-in MITK uses a very modular concept to maximize reusability and portability. A MITK application based on the BlueBerry application framework (for example the MITK Workbench) consists of several bundles (or plug-ins). A bundle can contain resources and program logic. It can also contribute so-called Views to the main application, which provide a specific user interface for controlling the bundles functions. -The creation of a MITK plug-in is considerably facilitated by using the MITK PluginGenerator as described in \ref NewPluginPage if you want to add a new view to an existing plugin see \ref NewViewPage. - -The mentioned tool was used to create a plug-in called org.mitk.example.gui.regiongrowing. -Let's first take a look at which files the PluginGenerator has created: - \verbatim documentation\doxygen\ modules.dox......................... Doxygen file for documenting your plug-in resources\ icon.png............................ The icon of your plug-in. GIMP or other programs (including your text editor) can be used to change this src\internal\ QmitkRegionGrowingView.cpp.......... The most important file, implementing behaviour QmitkRegionGrowingView.h............ Header file of the functionality QmitkRegionGrowingViewControls.ui... XML file of the Qt Designer, describes buttons, combo boxes, etc. of your controls CMakeLists.txt \...................... Build system related files for CMake files.cmake / manifest_headers.cmake................ Information about your plug-in plugin.xml ........................... BlueBerry integration \endverbatim If you are not familiar with Qt development, please look into this Qt company page describing .ui files The C++ files implement a subclass of QmitkAbstractView. In this special case of QmitkRegionGrowing, we added the option to set some seed points and run a region grower. If you are interested in the concrete changes necessary to turn a freshly generated QmitkRegionGrowing into an integrated one: The plug-in will be build as part of MITK Workbench. Do use it start MITK Workbench an select the region growing view in the view menu. To add a mitk::PointSet for the seed points: QmitkRegionGrowingView.h Add includes and forward declarations: \snippet QmitkRegionGrowingView.h includes Add the point set and a pointer to a QmitkPointListWidget as a private member: \snippet QmitkRegionGrowingView.h members QmitkRegionGrowingView.cpp CreateQtPartControl(): \snippet QmitkRegionGrowingView.cpp cpp-createqtpartcontrol To use the ITK region grower: QmitkRegionGrowingView.h Add the private method: \snippet QmitkRegionGrowingView.h itkimageprocessing QmitkRegionGrowingView.cpp Add includes: \snippet QmitkRegionGrowingView.cpp cpp-includes DoImageProcessing(): \snippet QmitkRegionGrowingView.cpp cpp-doimageprocessing And add the new method: \snippet QmitkRegionGrowingView.cpp cpp-itkimageaccess Have fun using MITK! If you meet any difficulties during your first steps, don't hesitate to ask on the MITK mailing list mitk-users@lists.sourceforge.net! People there are kind and will try to help you. \ref Step08Page "[Previous step]" \ref Step10Page "[Next Step]" \ref TutorialPage "[Main tutorial page]" */ diff --git a/Documentation/Doxygen/3-DeveloperManual/Starting/SettingUpMITK/BuildInstructions.dox b/Documentation/Doxygen/3-DeveloperManual/Starting/SettingUpMITK/BuildInstructions.dox index afdf3f4cfe..dd67e482f8 100644 --- a/Documentation/Doxygen/3-DeveloperManual/Starting/SettingUpMITK/BuildInstructions.dox +++ b/Documentation/Doxygen/3-DeveloperManual/Starting/SettingUpMITK/BuildInstructions.dox @@ -1,236 +1,232 @@ /** \page BuildInstructionsPage Build Instructions \tableofcontents \section BuildInstructions_Introduction Introduction The CMake-based build system of MITK supports a "superbuild" process, meaning that it will download, configure, and build all required third-party libraries (except Qt) automatically. These instructions will show you how to use the MITK superbuild. \note This page explains explicitly how to build MITK itself. If you want to create your own project based on MITK, the process described below is completely automated. Please see \ref HowToNewProject. For more advanced users, the last sections explains how to inject custom build libraries into the superbuild process. \section BuildInstructions_Prerequisites Prerequisites You need: -# Git (there are also numerous third-party graphical clients available). We recommend using Git, but see below for a way how to get the current source code without using it. -# CMake (version \minimumCMakeVersion or higher) -# Qt \minimumQt5Version if you plan to develop Qt-based applications -# If you are using macOS you need an XCode installation and the Command Line Tools as it provides the neccessary compilers and SDKs To build MITK on Linux, install the following packages, e. g. with APT: \code{.unparsed} sudo apt install build-essential doxygen git graphviz libfreetype6-dev libglu1-mesa-dev libssl-dev libtiff5-dev libxcomposite1 libxcursor1 libxdamage-dev libxi-dev libxkbcommon-x11-0 libxt-dev mesa-common-dev \endcode For the optional and experimental (!) Python integration, install NumPy and SimpleITK v1.x, e. g.: \code{.unparsed} sudo apt install python3-numpy python3-pip pip3 install SimpleITK \endcode \section BuildInstructions_Qt A note about Qt As we do not provide Qt in the MITK superbuild you need to install Qt manually. The Qt Company provides online installers for all supported platforms. We highly recommend to install Qt to the default location of the installer as it will allow MITK to automatically find Qt without any further action needed. Make sure to also select the following required components: - QtWebEngine - QtScript On Windows, the Qt installer offers a welcome and straight forward way to install OpenSSL. You find it under the Tools node. \section BuildInstructions_Get_Source Get a source tree Since MITK is under active development we recommend to use Git to check out the latest stable release from the homepage. If you decide to use the most current nightly release, make sure to get a stable tree: Check the MITK dashboard before checking out. If the build tree is not clean, you can specify an older revision for the checkout or get a stable tar ball from www.mitk.org. To clone MITK's current Git repository do: \code git clone https://phabricator.mitk.org/source/mitk.git MITK \endcode \section BuildInstructions_Build_With_CMake Build MITK with CMake Create a new directory for the superbuild binary tree, change to it and call CMake: In the shell (assuming your current directory is the same as the one where you issued the git clone command): \code mkdir MITK-superbuild cd MITK-superbuild ccmake ../MITK \endcode If you use Windows or prefer to use the CMake GUI, start the CMake GUI and enter the location of the source tree and binary tree, choose a suitable generator and configure the project. CMake will present you a couple of options, these are the most important ones: - CMAKE_PREFIX_PATH The path to your Qt installation, e.g., C:/Qt/5.12.9/msvc2017_64 or /home/user/Qt/5.12.9/gcc_64 - MITK_USE_BLUEBERRY Build the BlueBerry application framework - MITK_USE_Boost_LIBRARIES If you need binary Boost libraries, specify them here. - MITK_USE_OpenCV Build MITK code which depends on OpenCV (this will download and build OpenCV 2.4) - MITK_USE_Python3 Enables Python wrapping in MITK. This will also configure ITK, VTK, and OpenCV (if enabled) to build Python wrappers. - MITK_USE_Qt5 Build MITK code which depends on Qt 5 If you are satisfied with the configuration of your MITK superbuild, generate the project files with CMake by pressing "Generate". Linux and macOS users usually just enter "make" (optionally supplying the number threads to be used for a parallel build): \code make -j6 \endcode Windows users using Visual Studio can open the generated MITK-superbuild.sln solution file in the MITK-superbuild directory and start the build by building the BUILD_ALL project. \section BuildInstructions_Customize Customize your MITK superbuild The MITK superbuild configures MITK as well as all external libraries. The build directories of these libraries, and of MITK itself are located inside the MITK-superbuild directory. For example, the directory layout may look like: \code MITK-superbuild |- ep "external projects" |-bin |-lib |-include |-src |- MITK-build \endcode To change the configuration of the MITK build itself, choose the MITK-build directory as the binary directory in the CMake GUI (not the MITK-superbuild directory). After generating the project files, build the MITK project by either issuing "make" in the MITK-build directory (Linux, macOS), or by opening MITK-build/MITK.sln (Windows). You may also change the configuration of any project configured via the superbuild process. Make sure to also build the changed project and also the projects which depend on it. \section BuildInstructions_Running Running Applications On Linux, just execute the application you want to run. MITK executables are located in MITK-superbuild/MITK-build/bin On Windows, the PATH environment variable must contain the directories containing the third-party libraries. This is automatically done from Visual Studio. For running the applications directly use the generated batch files in the MITK-superbuild/MITK-build/bin. \section BuildInstructions_Documentation Documentation If you have the Doxygen documentation tool installed, you get a new project (Visual Studio) or "make" target named "doc". You can build this to generate the HTML documentation of MITK in the Documentation/Doxygen directory of your MITK-build binary tree or in the MITK_DOXYGEN_OUTPUT_DIR CMake variable (if specified). -\section BuildInstructions_Extending Extend MITK on your own (using the application framework BlueBerry) - -Please see \ref NewPluginPage - \section BuildInstructions_As_Toolkit Use MITK in your own project (as a toolkit) To use MITK in your external project, add the CMake command find_package(MITK REQUIRED) to your CMakeLists.txt and make use of the CMake macros mitk_create_module() and mitk_create_executable() provided by MITK. Here is a very basic example CMakeLists.txt including MITK as a project: \code cmake_minimum_required(VERSION 3.18 FATAL_ERROR) project(MyProject) find_package(MITK 2022.10 REQUIRED) add_executable(MyApp main.cpp) target_link_libraries(MyApp MitkCore) \endcode with the main.ccp being \code #include #include int main() { MITK_INFO << "Hello world!"; return 0; } \endcode \section BuildInstructions_Advanced_Customization Superbuild customization You can inject pre-build third-party libraries into the MITK superbuild by setting certain CMake variables before the first configure step. MITK will then use these third-party libraries instead of downloading and building them by itself. Note that you must take care of configuring those libraries with all options MITK requires. The variables listed below are provided for injecting third-party libraries. Their occurrence in the CMake GUI or in ccmake may depend on specific MITK_USE_* options set to ON. You may also use the variable names below without the EXTERNAL_ prefix, for example when providing their values on a command line call to CMake. - EXTERNAL_BOOST_ROOT Set this variable to your custom Boost installation - EXTERNAL_CTK_DIR Set this variable to your CTK binary tree (the directory containing the CTKConfig.cmake file) - EXTERNAL_CableSwig_DIR Set this variable to your CableSwig binary tree for Python wrapping (the directory containing the CableSwigConfig.cmake file) - EXTERNAL_DCMTK_DIR Set this variable to your DCMTK binary tree (the directory containing the DCMTKConfig.cmake file) - EXTERNAL_GDCM_DIR Set this variable to your GDCM binary tree (the directory containing the GDCMConfig.cmake file) - EXTERNAL_ITK_DIR Set this variable to your ITK binary tree (the directory containing the ITKConfig.cmake file) - EXTERNAL_OpenCV_DIR Set this variable to your OpenCV binary tree (the directory containing the OpenCVConfig.cmake file) - EXTERNAL_VTK_DIR Set this variable to your VTK binary tree (the directory containing the VTKConfig.cmake file) To set CMake options before the first configure step is invoked, supply them on the command line, i.e. \code ccmake -DITK_DIR:PATH=/opt/ITK-release ../MITK \endcode */ diff --git a/Documentation/Doxygen/3-DeveloperManual/Starting/SettingUpMITK/HowToNewProject.dox b/Documentation/Doxygen/3-DeveloperManual/Starting/SettingUpMITK/HowToNewProject.dox index 7bb8ca2707..093fd104e1 100644 --- a/Documentation/Doxygen/3-DeveloperManual/Starting/SettingUpMITK/HowToNewProject.dox +++ b/Documentation/Doxygen/3-DeveloperManual/Starting/SettingUpMITK/HowToNewProject.dox @@ -1,254 +1,230 @@ /** \page HowToNewProject Creating a new MITK project \tableofcontents This page is intended to give a comprehensive guide to setting up your own MITK based project. It will use the application framework provided by MITK and is probably the preferred way for most users. The first part of this document is a tutorial aimed at newcomers to MITK and possibly %CMake and tries to give as much help as possible on setting up your own project. If you are looking for more technical information about customizing MITK, the structure of the superbuild or packaging you might want to read the \ref HowToNewProjectAdvancedInformation. If you have set up your MITK project already and want to start developing you could take a look at \ref TutorialPage. \section HowToNewProjectGettingStarted Getting Started -To bootstrap your project MITK offers two convenient options: - -
    -
  1. Use the MITK Plugin Generator, a command line tool used to generate a customized - MITK project and/or MITK plug-ins. -
  2. Use the MITK project template - as an example project. -
- -Both options will provide you with a project which contains a "superbuild" mechanism -to automatically download, configure, and build MITK as a dependency of your own project. - -The MITK Plugin Generator generates code using the supplied command line arguments, -whereas the MITK project template needs immediate modifications to customize it to -your naming schemes. However, the project template will potentially contain more -code demonstrating features of MITK. - -\note Using the MITK Plugin Generator is recommended for beginners. +Use the MITK project template as an +example-based project template. \section HowToNewProjectPrerequisites Prerequisites What ever option you choose, a MITK-based project needs essentially the same prerequisites as MITK itself. Please see \ref BuildInstructions_Prerequisites for details. \note If you use one of the two options above you will \b not \b need to build MITK yourself. This will be done automatically. \section HowToNewProjectCreatingSourceDir Preparing your source directory In order to start developing with MITK, you first have to set up the source directory for your project. -\subsection HowToNewProjectSourceUsingGenerator Using the MITK Plugin Generator - -The usage of the Plugin Generator for creating a new project is described in -\ref NewPluginWithProject, please have a look there. - \subsection HowToNewProjectSourceUsingTemplate Using the MITK Project Template Download the project as a tarball or zipball and extract it to your desired source directory. \note This is a template. You must modify it such that it fits the needs of your particular project. Especially you should do a global search and replace for the string "awesome" to rename the template application and plug-in. You may want to rename some files too. \section HowToNewProjectGeneratingCMake Generating your binary with CMake After you have set up your source directory you can proceed to generate your binary directory using %CMake. Depending on your operating system and preferences you might want to use "cmake-gui" or "ccmake" (shell). This document assumes you are using cmake-gui.
  1. Start "cmake-gui" and enter your source (e.g. "D:\AwesomeProject") and binary directory (e.g. "D:\AwesomeProject-superbuild").
  2. Upon first pressing "Configure" you will be prompted to select your generator. This determines what project files will be generated by %CMake. Set this to the development tool you are intending to use (e.g. "Visual Studio 2010 64Bit" or "linux makefiles".
  3. Press "Configure" until no new variables appear and then "Generate". Now all project files have been generated into your binary directory.
  4. Double-check that the right Qt version is used.
Now you are ready to compile your code. Depending on your choice of tool this will be done differently, we cover two possibilities here. \subsection HowToNewProjectCompilingLinuxMakefiles Compiling using linux makefiles
  1. In the shell, switch to your binary directory.
  2. type "make" and hit enter
\subsection HowToNewProjectCompilingVisualStudio Compiling using visual studio We assume your application is called "AwesomeApp" and your project "AwesomeProject" and your binary directory is "D:\AwesomeProject-superbuild\". Replace names and paths accordingly.
  1. Close %CMake and open "D:\AwesomeProject-superbuild\AwesomeProject-superbuild.sln". Your Visual Studio should appear and by pressing F7 you start the compilation. This will clone the MITK source code, build it, and then start building your own project.
  2. After the superbuild compilation has finished, close the superbuild solution file and start the build solution file "D:\AwesomeProject-superbuild\AwesomeProject-build\AwesomeProject.sln"
  3. Set the "AwesomeApp" project as start-up project (right click > "Set as StartUp Project") and press "F5" to start your MITK AwesomeApp.
\note Just opening AwesomeProject.sln from your explorer by double-cliking won`t allow you to start or debug your application because the required environment variables would be missing. Use the supplied batch files or set your PATH variable accordingly. \section HowToNewProjectAddingMITKFunctionality I want to use some MITK plugin but it is not available Due to the sheer number of MITK plugins not every plugin is activated by default. To activate a specific plugin (again replace paths as needed):
  1. Start "cmake-gui" and set the binary directory to "D:\AwesomeProject-superbuild\MITK-superbuild\MITK-build\", the source will adjust automatically and you will see new settings appear.
  2. Navigate to the plugin you want to use (e.g. "MITK_BUILD_org.mitk.gui.qt.segmentation") and tick the checkbox behind it
  3. Press "Configure" until no new variables appear and then "Generate".
  4. Build MITK using your development tool (as in \ref HowToNewProjectCompilingLinuxMakefiles or \ref HowToNewProjectCompilingVisualStudio only in the "D:\AwesomeProject-superbuild\MITK-superbuild\MITK-build\" directory )
  5. Start "cmake-gui" and set the binary directory to "D:\AwesomeProject-superbuild\AwesomeProject-build\", the source will adjust automatically and you will see new settings appear.
  6. Press "Configure" until no new variables appear and then "Generate".
  7. Build your project
  8. Start your application
\note If you want to use an application provided by MITK (e.g. MITK Workbench) you have to tick the appropriate checkbox as well (in this case MITK_BUILD_APP_Workbench) and build MITK. Do note, that this application will be located in the bin directory of the "D:\AwesomeProject-superbuild\MITK-superbuild\MITK-build\" folder. \section HowToNewProjectAdvancedInformation Information for advanced users \subsection HowToNewProjectCustomizingMITK Customizing MITK -The %CMake scripts from the Plugin Generator of the project template provide some -handy options which allow you to customize the MITK build used in your project. You can either inject an already build MITK to be used by your project or configure some MITK options directly in your project's superbuild configuration if MITK is going to be build inside your project. \subsection HowToNewProjectCustomizingMITKInjectMITK Inject a MITK build By setting the \b EXTERNAL_MITK_DIR \b variable in your project's superbuild %CMake configuration to a MITK build directory (containing the MITKConfig.cmake) you can skip the MITK build process. If MITK is the only external project in your project, you might want to disable the superbuild of your project completely (set _USE_SUPERBUILD to OFF or edit your CMakeLists.txt file to set it to OFF by default) and set the \b MITK_DIR \b %CMake variable to your MITK build directory. \subsection HowToNewProjectCustomizingMITKConfigure Configure the MITK superbuild If MITK is being build inside your project's superbuild process, you can enable the use of certain third-party libraries inside of MITK. The following variables control the MITK configuration:
  • \b MITK_USE_BLUEBERRY Enable the use of the BlueBerry application framework
  • \b MITK_USE_CTK Download, compile, and use CTK in MITK
  • \b MITK_USE_DCMTK Download, compile, and use DCMTK in MITK
  • \b MITK_USE_OpenCV Download, compile, and use OpenCV in MITK
  • \b MITK_USE_Python3 Download and compile 1CableSwig and enable Python wrapping in ITK, VTK, OpenCV, and MITK
  • \b MITK_USE_Qt5 Use the Qt 5 framework in MITK
You can also inject already build third-party libraries from inside your project's superbuild in the MITK superbuild by using any of the following %CMake variables:
  • \b MITK_CTK_DIR Reuse a CTK build directory in MITK.
  • \b MITK_CableSwig_DIR Reuse a 1CableSwig build directory in MITK.
  • \b MITK_DCMTK_DIR Reuse a DCMKT build directory in MITK.
  • \b MITK_GDCM_DIR Reuse a GDCM build directory in MITK.
  • \b MITK_ITK_DIR Reuse a ITK build directory in MITK.
  • \b MITK_OpenCV_DIR Reuse a OpenCV build directory in MITK.
  • \b MITK_VTK_DIR Reuse a VTK build directory in MITK.
If the corresponding \b MITK_USE_ \b option is set to on, the MITK superbuild will use the provided build directory instead of building the project itself. You can also control the source code location for MITK in your project's superbuild configuration by using the following %CMake variables:
  • \b MITK_SOURCE_DIR The path to the MITK source directory. If the value for this variable is non-empty, the variables below are ignored.
  • \b MITK_GIT_REPOSITORY The Git repository containing the MITK source code.
  • \b MITK_GIT_TAG The hash id, tag or branch name used for a checkout from MITK_GIT_REPOSITORY.
\subsection HowToNewProjectProjectStructure Project Structure If you are using the superbuild feature of the generated project (the default), you might want to familiarise yourself with the layout of your build tree. The top-level build directory which you specified in %CMake when configuring your project will contain all the required dependencies. Suppose we call our project MyProject and the build directory is "C:\MyProject-superbuild". Then the layout looks something like this: MyProjectLayout.png The top-level directory contains the source code and the build directories from the dependencies of your project. In the current case, the only dependency of MyProject is MITK, which in turn has downloaded and built its own dependencies (CTK, DCMTK, ITK, etc.). The "real" build tree for your project is located in MyProject-superbuild/MyProject-build, so point the %CMake-GUI to this build directory if you want to change the set of enabled plug-ins for example. Further, you should open the MyProject.sln solution file (for Visual Studio) or execute "make" in the MyProject-superbuild/MyProject-build/ directory. Only for the very first time or if you want to update and newly build the project's dependencies should you use the project files in the MyProject-superbuild directory directly. The same applies for the MyProject-superbuild/MITK-superbuild directory. This directory contains the MITK superbuild, nested inside your project's superbuild. If you want to change %CMake options for MITK, use the MyProject-superbuild/MITK-superbuild/MITK-build build directory. \imageMacro{HowToNewProject-MyProjectLayout.png,"Layout of MyProject",4.02} \subsection HowToNewProjectPackaging Packaging -The project template and the generated projects by the Plugin Generator come -with full packaging support. You can create deployable packages of your project +You can create deployable packages of your project for all supported operating systems my building the PACKAGE target. On Linux, this will create a tarball, on MacOS a .dmg file, and on Windows a zipball and an NSIS installer (if NSIS is installed and found). You can read more about deployment \ref DeploymentPage "here". */ diff --git a/Documentation/Doxygen/3-DeveloperManual/Starting/Starting.dox b/Documentation/Doxygen/3-DeveloperManual/Starting/Starting.dox index 509cef90c3..4bc71644b8 100644 --- a/Documentation/Doxygen/3-DeveloperManual/Starting/Starting.dox +++ b/Documentation/Doxygen/3-DeveloperManual/Starting/Starting.dox @@ -1,39 +1,38 @@ /** \page StartingDevelopment Starting your MITK Development This introduction will acquaint you with the most important workflows to get you started with your MITK development. First, \ref Architecture will explain the differences between the application and the toolkit. \ref SettingUpMITK will get you started with a working environment for MITK development. \ref GettingToKnowMITK will walk you trough the folder structure, the module system, and plugin system. This chapter also contains an extensive tutorial on how to work with MITK. The \ref FirstSteps section will then show you how to extend MITK for your own project.
  • \subpage Architecture
  • \subpage SettingUpMITK
    • \ref SupportedPlatformsPage
    • \ref BuildInstructionsPage
    • \ref thirdpartylibs
    • \ref HowToNewProject
  • \subpage GettingToKnowMITK
    • \ref DirectoryStructurePage
    • \ref TutorialPage
    • \ref CMAKE_FAQ
    • \ref StyleGuideAndNotesPage
    • \ref DocumentationGuide
    • \ref CodingPage
    • \ref KnownProblemsPage
  • \subpage FirstSteps
    • -
    • \ref NewPluginPage
    • \ref NewViewPage
    • \ref NewModulePage
    • \ref CMAKE_FAQ
  • \subpage AboutTestingPage
*/ diff --git a/Documentation/doxygen.conf.in b/Documentation/doxygen.conf.in index d1f45ed1f2..51573d0011 100644 --- a/Documentation/doxygen.conf.in +++ b/Documentation/doxygen.conf.in @@ -1,2433 +1,2432 @@ # Doxyfile 1.8.8 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # # All text after a double hash (##) is considered a comment and is placed in # front of the TAG it is preceding. # # All text after a single hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists, items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (\" \"). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all text # before the first occurrence of this tag. Doxygen uses libiconv (or the iconv # built into libc) for the transcoding. See http://www.gnu.org/software/libiconv # for the list of possible encodings. # The default value is: UTF-8. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded by # double-quotes, unless you are using Doxywizard) that should identify the # project for which the documentation is generated. This name is used in the # title of most generated pages and in a few other places. # The default value is: My Project. PROJECT_NAME = "Medical Imaging Interaction Toolkit" # The PROJECT_NUMBER tag can be used to enter a project or revision number. This # could be handy for archiving the generated documentation or if some version # control system is used. PROJECT_NUMBER = @MITK_VERSION_STRING@ # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a # quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = "Medical Imaging Interaction Toolkit" # With the PROJECT_LOGO tag one can specify an logo or icon that is included in # the documentation. The maximum height of the logo should not exceed 55 pixels # and the maximum width should not exceed 200 pixels. Doxygen will copy the logo # to the output directory. PROJECT_LOGO = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. OUTPUT_DIRECTORY = "@MITK_DOXYGEN_OUTPUT_DIR@" # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- # directories (in 2 levels) under the output directory of each output format and # will distribute the generated files over these directories. Enabling this # option can be useful when feeding doxygen a huge amount of source files, where # putting all generated files in the same directory would otherwise causes # performance problems for the file system. # The default value is: NO. CREATE_SUBDIRS = NO # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII # characters to appear in the names of generated files. If set to NO, non-ASCII # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode # U+3044. # The default value is: NO. ALLOW_UNICODE_NAMES = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, # Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), # Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, # Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), # Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, # Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, # Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, # Ukrainian and Vietnamese. # The default value is: English. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. # The default value is: YES. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief # description of a member or function before the detailed description # # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. # The default value is: YES. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator that is # used to form the text in various listings. Each string in this list, if found # as the leading text of the brief description, will be stripped from the text # and the result, after processing the whole list, is used as the annotated # text. Otherwise, the brief description is used as-is. If left blank, the # following values are used ($name is automatically replaced with the name of # the entity):The $name class, The $name widget, The $name file, is, provides, # specifies, contains, represents, a, an and the. ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # doxygen will generate a detailed section even if there is only a brief # description. # The default value is: NO. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. # The default value is: NO. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path # before files name in the file list and in the header files. If set to NO the # shortest path that makes the file name unique will be used # The default value is: YES. FULL_PATH_NAMES = NO # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. # Stripping is only done if one of the specified strings matches the left-hand # part of the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the path to # strip. # # Note that you can specify absolute paths here, but also relative paths, which # will be relative from the directory where doxygen is started. # This tag requires that the tag FULL_PATH_NAMES is set to YES. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the # path mentioned in the documentation of a class, which tells the reader which # header file to include in order to use a class. If left blank only the name of # the header file containing the class definition is used. Otherwise one should # specify the list of include paths that are normally passed to the compiler # using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but # less readable) file names. This can be useful is your file systems doesn't # support long names like on DOS, Mac, or CD-ROM. # The default value is: NO. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the # first line (until the first dot) of a Javadoc-style comment as the brief # description. If set to NO, the Javadoc-style will behave just like regular Qt- # style comments (thus requiring an explicit @brief command for a brief # description.) # The default value is: NO. JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first # line (until the first dot) of a Qt-style comment as the brief description. If # set to NO, the Qt-style will behave just like regular Qt-style comments (thus # requiring an explicit \brief command for a brief description.) # The default value is: NO. QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a # multi-line C++ special comment block (i.e. a block of //! or /// comments) as # a brief description. This used to be the default behavior. The new default is # to treat a multi-line C++ comment block as a detailed description. Set this # tag to YES if you prefer the old behavior instead. # # Note that setting this tag to YES also means that rational rose comments are # not recognized any more. # The default value is: NO. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the # documentation from any documented member that it re-implements. # The default value is: YES. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a # new page for each member. If set to NO, the documentation of a member will be # part of the file/class/namespace that contains it. # The default value is: NO. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen # uses this value to replace tabs by spaces in code fragments. # Minimum value: 1, maximum value: 16, default value: 4. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that act as commands in # the documentation. An alias has the form: # name=value # For example adding # "sideeffect=@par Side Effects:\n" # will allow you to put the command \sideeffect (or @sideeffect) in the # documentation, which will result in a user-defined paragraph with heading # "Side Effects:". You can put \n's in the value part of an alias to insert # newlines. ALIASES = "FIXME=\par Fix Me's:\n" \ "BlueBerry=\if BLUEBERRY" \ "endBlueBerry=\endif" \ "bundlemainpage{1}=\page \1" \ "embmainpage{1}=\page \1" \ "github{2}=\2" \ "deprecatedSince{1}=\xrefitem deprecatedSince\1 \"\" \"Functions deprecated as of \1\" \deprecated (as of \1) " \ "minimumCMakeVersion=@MITK_CMAKE_MINIMUM_REQUIRED_VERSION@" \ "minimumQt5Version=@MITK_QT5_MINIMUM_VERSION@" \ "imageMacro{3}=\image html \1 \2 \n \image latex \1 \2 width=\3cm" \ "developersguidemainpage{1}=\page \1 " \ "usersguidemainpage{1}=\page \1 " \ "nondependentPluginLink{3}= \ref \1 \"\3\" " # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For # instance, some of the names that are used will be different. The list of all # members will be omitted, etc. # The default value is: NO. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or # Python sources only. Doxygen will then generate output that is more tailored # for that language. For instance, namespaces will be presented as packages, # qualified scopes will look different, etc. # The default value is: NO. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources. Doxygen will then generate output that is tailored for Fortran. # The default value is: NO. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for VHDL. # The default value is: NO. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and # language is one of the parsers supported by doxygen: IDL, Java, Javascript, # C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: # FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: # Fortran. In the later case the parser tries to guess whether the code is fixed # or free formatted code, this is the default for Fortran type files), VHDL. For # instance to make doxygen treat .inc files as Fortran files (default is PHP), # and .f files as C (default is Fortran), use: inc=Fortran f=C. # # Note For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise # the files are not read by doxygen. EXTENSION_MAPPING = cmake=c++ # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable # documentation. See http://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you can # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in # case of backward compatibilities issues. # The default value is: YES. MARKDOWN_SUPPORT = YES # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by by putting a % sign in front of the word # or globally by setting AUTOLINK_SUPPORT to NO. # The default value is: YES. AUTOLINK_SUPPORT = YES # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should set this # tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); # versus func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. # The default value is: NO. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. # The default value is: NO. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: # http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen # will parse them like normal C++ but will assume all classes use public instead # of private inheritance when no explicit protection keyword is present. # The default value is: NO. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate # getter and setter methods for a property. Setting this option to YES will make # doxygen to replace the get and set methods by a property in the documentation. # This will only work if the methods are indeed getting or setting a simple # type. If this is not the case, or you want to show the methods anyway, you # should set this option to NO. # The default value is: YES. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. # The default value is: NO. DISTRIBUTE_GROUP_DOC = YES # Set the SUBGROUPING tag to YES to allow class member groups of the same type # (for instance a group of public functions) to be put as a subgroup of that # type (e.g. under the Public Functions section). Set it to NO to prevent # subgrouping. Alternatively, this can be done per class using the # \nosubgrouping command. # The default value is: YES. SUBGROUPING = YES # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions # are shown inside the group in which they are included (e.g. using \ingroup) # instead of on a separate page (for HTML and Man pages) or section (for LaTeX # and RTF). # # Note that this feature does not work in combination with # SEPARATE_MEMBER_PAGES. # The default value is: NO. INLINE_GROUPED_CLASSES = NO # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions # with only public data fields or simple typedef fields will be shown inline in # the documentation of the scope in which they are defined (i.e. file, # namespace, or group documentation), provided this scope is documented. If set # to NO, structs, classes, and unions are shown on a separate page (for HTML and # Man pages) or section (for LaTeX and RTF). # The default value is: NO. INLINE_SIMPLE_STRUCTS = NO # When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or # enum is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically be # useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. # The default value is: NO. TYPEDEF_HIDES_STRUCT = NO # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This # cache is used to resolve symbols given their name and scope. Since this can be # an expensive process and often the same symbol appears multiple times in the # code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small # doxygen will become slower. If the cache is too large, memory is wasted. The # cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range # is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 # symbols. At the end of a run doxygen will report the cache usage and suggest # the optimal cache size from a speed point of view. # Minimum value: 0, maximum value: 9, default value: 0. LOOKUP_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. Private # class members and static file members will be hidden unless the # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. # Note: This will also disable the warnings about undocumented members that are # normally produced when WARNINGS is set to YES. # The default value is: NO. EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class will # be included in the documentation. # The default value is: NO. EXTRACT_PRIVATE = NO # If the EXTRACT_PACKAGE tag is set to YES all members with package or internal # scope will be included in the documentation. # The default value is: NO. EXTRACT_PACKAGE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file will be # included in the documentation. # The default value is: NO. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined # locally in source files will be included in the documentation. If set to NO # only classes defined in header files are included. Does not have any effect # for Java sources. # The default value is: YES. EXTRACT_LOCAL_CLASSES = @MITK_DOXYGEN_INTERNAL_DOCS@ # This flag is only useful for Objective-C code. When set to YES local methods, # which are defined in the implementation section but not in the interface are # included in the documentation. If set to NO only methods in the interface are # included. # The default value is: NO. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base name of # the file that contains the anonymous namespace. By default anonymous namespace # are hidden. # The default value is: NO. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all # undocumented members inside documented classes or files. If set to NO these # members will be included in the various overviews, but no documentation # section is generated. This option has no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set # to NO these classes will be included in the various overviews. This option has # no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend # (class|struct|union) declarations. If set to NO these declarations will be # included in the documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = @MITK_DOXYGEN_HIDE_FRIEND_COMPOUNDS@ # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any # documentation blocks found inside the body of a function. If set to NO these # blocks will be appended to the function's detailed documentation block. # The default value is: NO. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation that is typed after a # \internal command is included. If the tag is set to NO then the documentation # will be excluded. Set it to YES to include the internal documentation. # The default value is: NO. INTERNAL_DOCS = @MITK_DOXYGEN_INTERNAL_DOCS@ # If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file # names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. # The default value is: system dependent. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with # their full class and namespace scopes in the documentation. If set to YES the # scope will be hidden. # The default value is: NO. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. SHOW_INCLUDE_FILES = YES # If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each # grouped member an include statement to the documentation, telling the reader # which file to include in order to use the member. # The default value is: NO. SHOW_GROUPED_MEMB_INC = NO # If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include # files with double quotes in the documentation rather than with sharp brackets. # The default value is: NO. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the # documentation for inline members. # The default value is: YES. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the # (detailed) documentation of file and class members alphabetically by member # name. If set to NO the members will appear in declaration order. # The default value is: YES. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief # descriptions of file, namespace and class members alphabetically by member # name. If set to NO the members will appear in declaration order. Note that # this will also influence the order of the classes in the class list. # The default value is: NO. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the # (brief and detailed) documentation of class members so that constructors and # destructors are listed first. If set to NO the constructors will appear in the # respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. # Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief # member documentation. # Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting # detailed member documentation. # The default value is: NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy # of group names into alphabetical order. If set to NO the group names will # appear in their defined order. # The default value is: NO. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by # fully-qualified names, including namespaces. If set to NO, the class list will # be sorted only by class name, not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the alphabetical # list. # The default value is: NO. SORT_BY_SCOPE_NAME = YES # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper # type resolution of all parameters of a function it will reject a match between # the prototype and the implementation of a member function even if there is # only one candidate or it is obvious which candidate to choose by doing a # simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still # accept a match between prototype and implementation in such cases. # The default value is: NO. STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the # todo list. This list is created by putting \todo commands in the # documentation. # The default value is: YES. GENERATE_TODOLIST = @MITK_DOXYGEN_GENERATE_TODOLIST@ # The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the # test list. This list is created by putting \test commands in the # documentation. # The default value is: YES. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug # list. This list is created by putting \bug commands in the documentation. # The default value is: YES. GENERATE_BUGLIST = @MITK_DOXYGEN_GENERATE_BUGLIST@ # The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO) # the deprecated list. This list is created by putting \deprecated commands in # the documentation. # The default value is: YES. GENERATE_DEPRECATEDLIST= @MITK_DOXYGEN_GENERATE_DEPRECATEDLIST@ # The ENABLED_SECTIONS tag can be used to enable conditional documentation # sections, marked by \if ... \endif and \cond # ... \endcond blocks. ENABLED_SECTIONS = @MITK_DOXYGEN_ENABLED_SECTIONS@ # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the # initial value of a variable or macro / define can have for it to appear in the # documentation. If the initializer consists of more lines than specified here # it will be hidden. Use a value of 0 to hide initializers completely. The # appearance of the value of individual variables and macros / defines can be # controlled using \showinitializer or \hideinitializer command in the # documentation regardless of this setting. # Minimum value: 0, maximum value: 10000, default value: 30. MAX_INITIALIZER_LINES = 0 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at # the bottom of the documentation of classes and structs. If set to YES the list # will mention the files that were used to generate the documentation. # The default value is: YES. SHOW_USED_FILES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. This # will remove the Files entry from the Quick Index and from the Folder Tree View # (if specified). # The default value is: YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces # page. This will remove the Namespaces entry from the Quick Index and from the # Folder Tree View (if specified). # The default value is: YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command command input-file, where command is the value of the # FILE_VERSION_FILTER tag, and input-file is the name of an input file provided # by doxygen. Whatever the program writes to standard output is used as the file # version. For an example see the documentation. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. To create the layout file # that represents doxygen's defaults, run doxygen with the -l option. You can # optionally specify a file name after the option, if omitted DoxygenLayout.xml # will be used as the name of the layout file. # # Note that if you run doxygen from a directory containing a file called # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. LAYOUT_FILE = "@MITK_SOURCE_DIR@/Documentation/MITKDoxygenLayout.xml" # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib # extension is automatically appended if omitted. This requires the bibtex tool # to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. # For LaTeX the style of the bibliography can be controlled using # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the # search path. See also \cite for info how to create references. CITE_BIB_FILES = #--------------------------------------------------------------------------- # Configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated to # standard output by doxygen. If QUIET is set to YES this implies that the # messages are off. # The default value is: NO. QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are # generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES # this implies that the warnings are on. # # Tip: Turn warnings on while writing the documentation. # The default value is: YES. WARNINGS = YES # If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag # will automatically be disabled. # The default value is: YES. WARN_IF_UNDOCUMENTED = YES # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some parameters # in a documented function, or documenting parameters that don't exist or using # markup commands wrongly. # The default value is: YES. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return # value. If set to NO doxygen will only warn about wrong or incomplete parameter # documentation, but not about the absence of documentation. # The default value is: NO. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that doxygen # can produce. The string should contain the $file, $line, and $text tags, which # will be replaced by the file and line number from which the warning originated # and the warning text. Optionally the format may contain $version, which will # be replaced by the version of the file (if it could be obtained via # FILE_VERSION_FILTER) # The default value is: $file:$line: $text. WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning and error # messages should be written. If left blank the output is written to standard # error (stderr). WARN_LOGFILE = #--------------------------------------------------------------------------- # Configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag is used to specify the files and/or directories that contain # documented source files. You may enter file names like myfile.cpp or # directories like /usr/src/myproject. Separate the files or directories with # spaces. # Note: If this tag is empty the current directory is searched. INPUT = "@MITK_SOURCE_DIR@" \ "@MITK_BINARY_DIR@" \ @MITK_DOXYGEN_ADDITIONAL_INPUT_DIRS@ # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv # documentation (see: http://www.gnu.org/software/libiconv) for the list of # possible encodings. # The default value is: UTF-8. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and # *.h) to filter out the source-files in the directories. If left blank the # following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, # *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, # *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, # *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, # *.qsf, *.as and *.js. FILE_PATTERNS = *.h \ *.dox \ *.md # The RECURSIVE tag can be used to specify whether or not subdirectories should # be searched for input files as well. # The default value is: NO. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. # # Note that relative paths are relative to the directory from which doxygen is # run. EXCLUDE = "@MITK_SOURCE_DIR@/Utilities/qtsingleapplication/" \ - "@MITK_SOURCE_DIR@/Applications/PluginGenerator/" \ "@MITK_SOURCE_DIR@/Modules/CppMicroServices/core/doc/snippets/" \ "@MITK_SOURCE_DIR@/Modules/CppMicroServices/core/doc/doxygen/standalone/" \ "@MITK_SOURCE_DIR@/Modules/CppMicroServices/core/test/" \ "@MITK_SOURCE_DIR@/Modules/CppMicroServices/core/examples/" \ "@MITK_SOURCE_DIR@/Modules/CppMicroServices/core/src/util/jsoncpp.cpp" \ "@MITK_SOURCE_DIR@/Modules/CppMicroServices/third_party" \ "@MITK_SOURCE_DIR@/CMake/PackageDepends" \ "@MITK_SOURCE_DIR@/CMakeExternals" \ "@MITK_SOURCE_DIR@/Licenses" \ "@MITK_BINARY_DIR@/Documentation/Doxygen" \ "@MITK_BINARY_DIR@/bin/" \ "@MITK_BINARY_DIR@/PT/" \ "@MITK_BINARY_DIR@/GP/" \ "@MITK_BINARY_DIR@/_CPack_Packages/" \ @MITK_DOXYGEN_ADDITIONAL_EXCLUDE_DIRS@ # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. # The default value is: NO. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories for example use the pattern */test/* EXCLUDE_PATTERNS = README* \ moc_* \ ui_* \ qrc_* \ wrap_* \ Register* \ */files.cmake \ */.git/* \ *_p.h \ *Private.* \ */Internal/* \ */internal/* \ */Snippets/* \ */snippets/* \ */testing/* \ */Testing/* \ */test/* \ */resource/* \ "@MITK_BINARY_DIR@/*.cmake" \ @MITK_DOXYGEN_EXCLUDE_PATTERNS@ # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories use the pattern */test/* EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or directories # that contain example code fragments that are included (see the \include # command). EXAMPLE_PATH = "@MITK_SOURCE_DIR@/Examples/" \ "@MITK_SOURCE_DIR@/Examples/Tutorial/" \ "@MITK_SOURCE_DIR@/Examples/Plugins/" \ "@MITK_SOURCE_DIR@/Examples/QtFreeRender/" \ "@MITK_SOURCE_DIR@/Modules/Core/" \ "@MITK_SOURCE_DIR@/Modules/CppMicroServices/core/doc/snippets/" \ "@MITK_SOURCE_DIR@/Modules/CppMicroServices/core/examples/" \ "@MITK_SOURCE_DIR@/Modules/CppMicroServices/" \ "@MITK_SOURCE_DIR@/Modules/OpenCL/Documentation/doxygen/snippets/" \ "@MITK_SOURCE_DIR@/Modules/IGT/Tutorial/" \ "@MITK_SOURCE_DIR@/Plugins/org.mitk.gui.common/src/" \ "@MITK_SOURCE_DIR@/Plugins/org.mitk.gui.qt.igtexamples/" \ "@MITK_SOURCE_DIR@/Plugins/org.mitk.gui.qt.igttracking/" # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and # *.h) to filter out the source-files in the directories. If left blank all # files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude commands # irrespective of the value of the RECURSIVE tag. # The default value is: NO. EXAMPLE_RECURSIVE = YES # The IMAGE_PATH tag can be used to specify one or more files or directories # that contain images that are to be included in the documentation (see the # \image command). IMAGE_PATH = "@MITK_SOURCE_DIR@/Documentation/Doxygen/" \ "@MITK_SOURCE_DIR@" \ @MITK_DOXYGEN_ADDITIONAL_IMAGE_PATHS@ # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command: # # # # where is the value of the INPUT_FILTER tag, and is the # name of an input file. Doxygen will then use the output that the filter # program writes to standard output. If FILTER_PATTERNS is specified, this tag # will be ignored. # # Note that the filter must not add or remove lines; it is applied before the # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: pattern=filter # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how # filters are used. If the FILTER_PATTERNS tag is empty or if none of the # patterns match the file name, INPUT_FILTER is applied. FILTER_PATTERNS = *.cmake=@CMakeDoxygenFilter_EXECUTABLE@ # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER ) will also be used to filter the input files that are used for # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). # The default value is: NO. FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) and # it is also possible to disable source filtering for a specific pattern using # *.ext= (so without naming a filter). # This tag requires that the tag FILTER_SOURCE_FILES is set to YES. FILTER_SOURCE_PATTERNS = # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that # is part of the input, its contents will be placed on the main page # (index.html). This can be useful if you have a project on for instance GitHub # and want to reuse the introduction page also for the doxygen output. USE_MDFILE_AS_MAINPAGE = #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will be # generated. Documented entities will be cross-referenced with these sources. # # Note: To get rid of all source code in the generated output, make sure that # also VERBATIM_HEADERS is set to NO. # The default value is: NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body of functions, # classes and enums directly into the documentation. # The default value is: NO. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any # special comment blocks from generated source code fragments. Normal C, C++ and # Fortran comments will always remain visible. # The default value is: YES. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES then for each documented # function all documented functions referencing it will be listed. # The default value is: NO. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES then for each documented function # all documented entities called/used by that function will be listed. # The default value is: NO. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set # to YES, then the hyperlinks from functions in REFERENCES_RELATION and # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will # link to the documentation. # The default value is: YES. REFERENCES_LINK_SOURCE = YES # If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the # source code will show a tooltip with additional information such as prototype, # brief description and links to the definition and documentation. Since this # will make the HTML file larger and loading of large files a bit slower, you # can opt to disable this feature. # The default value is: YES. # This tag requires that the tag SOURCE_BROWSER is set to YES. SOURCE_TOOLTIPS = YES # If the USE_HTAGS tag is set to YES then the references to source code will # point to the HTML generated by the htags(1) tool instead of doxygen built-in # source browser. The htags tool is part of GNU's global source tagging system # (see http://www.gnu.org/software/global/global.html). You will need version # 4.8.6 or higher. # # To use it do the following: # - Install the latest version of global # - Enable SOURCE_BROWSER and USE_HTAGS in the config file # - Make sure the INPUT points to the root of the source tree # - Run doxygen as normal # # Doxygen will invoke htags (and that will in turn invoke gtags), so these # tools must be available from the command line (i.e. in the search path). # # The result: instead of the source browser generated by doxygen, the links to # source code will now point to the output of htags. # The default value is: NO. # This tag requires that the tag SOURCE_BROWSER is set to YES. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a # verbatim copy of the header file for each class for which an include is # specified. Set to NO to disable this. # See also: Section \class. # The default value is: YES. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all # compounds will be generated. Enable this if the project contains a lot of # classes, structs, unions or interfaces. # The default value is: YES. ALPHABETICAL_INDEX = YES # The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in # which the alphabetical index list will be split. # Minimum value: 1, maximum value: 20, default value: 5. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. COLS_IN_ALPHA_INDEX = 3 # In case all classes in a project start with a common prefix, all classes will # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag # can be used to specify a prefix (or a list of prefixes) that should be ignored # while generating the index headers. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. IGNORE_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES doxygen will generate HTML output # The default value is: YES. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of # it. # The default directory is: html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each # generated HTML page (for example: .htm, .php, .asp). # The default value is: .html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a user-defined HTML header file for # each generated HTML page. If the tag is left blank doxygen will generate a # standard header. # # To get valid HTML the header file that includes any scripts and style sheets # that doxygen needs, which is dependent on the configuration options used (e.g. # the setting GENERATE_TREEVIEW). It is highly recommended to start with a # default header using # doxygen -w html new_header.html new_footer.html new_stylesheet.css # YourConfigFile # and then modify the file new_header.html. See also section "Doxygen usage" # for information on how to generate the default header that doxygen normally # uses. # Note: The header is subject to change so you typically have to regenerate the # default header when upgrading to a newer version of doxygen. For a description # of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each # generated HTML page. If the tag is left blank doxygen will generate a standard # footer. See HTML_HEADER for more information on how to generate a default # footer and what special commands can be used inside the footer. See also # section "Doxygen usage" for information on how to generate the default footer # that doxygen normally uses. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style # sheet that is used by each HTML page. It can be used to fine-tune the look of # the HTML output. If left blank doxygen will generate a default style sheet. # See also section "Doxygen usage" for information on how to generate the style # sheet that doxygen normally uses. # Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as # it is more robust and this tag (HTML_STYLESHEET) will in the future become # obsolete. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_STYLESHEET = # The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined # cascading style sheets that are included after the standard style sheets # created by doxygen. Using this option one can overrule certain style aspects. # This is preferred over using HTML_STYLESHEET since it does not replace the # standard style sheet and is therefor more robust against future updates. # Doxygen will copy the style sheet files to the output directory. # Note: The order of the extra stylesheet files is of importance (e.g. the last # stylesheet in the list overrules the setting of the previous ones in the # list). For an example see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_STYLESHEET = @MITK_DOXYGEN_STYLESHEET@ # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note # that these files will be copied to the base HTML output directory. Use the # $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these # files. In the HTML_STYLESHEET file, use the file name only. Also note that the # files will be copied as-is; there are no commands or markers available. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_FILES = "@MITK_SOURCE_DIR@/Documentation/Doxygen/mitkLogo.jpg" # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the stylesheet and background images according to # this color. Hue is specified as an angle on a colorwheel, see # http://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. # Minimum value: 0, maximum value: 359, default value: 220. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors # in the HTML output. For a value of 0 the output will use grayscales only. A # value of 255 will produce the most vivid colors. # Minimum value: 0, maximum value: 255, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the # luminance component of the colors in the HTML output. Values below 100 # gradually make the output lighter, whereas values above 100 make the output # darker. The value divided by 100 is the actual gamma applied, so 80 represents # a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not # change the gamma. # Minimum value: 40, maximum value: 240, default value: 80. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting this # to NO can help when comparing the output of multiple runs. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_TIMESTAMP = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_DYNAMIC_SECTIONS = @MITK_DOXYGEN_HTML_DYNAMIC_SECTIONS@ # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand # and collapse entries dynamically later on. Doxygen will expand the tree to # such a level that at most the specified number of entries are visible (unless # a fully collapsed tree already exceeds this amount). So setting the number of # entries 1 will produce a full collapsed tree by default. 0 is a special value # representing an infinite number of entries and will result in a full expanded # tree by default. # Minimum value: 0, maximum value: 9999, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development # environment (see: http://developer.apple.com/tools/xcode/), introduced with # OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a # Makefile in the HTML output directory. Running make will produce the docset in # that directory and running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at # startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html # for more information. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_DOCSET = NO # This tag determines the name of the docset feed. A documentation feed provides # an umbrella under which multiple documentation sets from a single provider # (such as a company or product suite) can be grouped. # The default value is: Doxygen generated docs. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_FEEDNAME = "Doxygen generated docs" # This tag specifies a string that should uniquely identify the documentation # set bundle. This should be a reverse domain-name style string, e.g. # com.mycompany.MyDocSet. Doxygen will append .docset to the name. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_BUNDLE_ID = org.doxygen.Project # The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. # The default value is: org.doxygen.Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. # The default value is: Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop # (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on # Windows. # # The HTML Help Workshop contains a compiler that can convert all HTML output # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML # files are now used as the Windows 98 help format, and will replace the old # Windows help format (.hlp) on all Windows platforms in the future. Compressed # HTML files also contain an index, a table of contents, and you can search for # words in the documentation. The HTML workshop also contains a viewer for # compressed HTML files. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_HTMLHELP = NO # The CHM_FILE tag can be used to specify the file name of the resulting .chm # file. You can add a path in front of the file if the result should not be # written to the html output directory. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_FILE = # The HHC_LOCATION tag can be used to specify the location (absolute path # including file name) of the HTML help compiler ( hhc.exe). If non-empty # doxygen will try to run the HTML help compiler on the generated index.hhp. # The file has to be specified with full path. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated ( # YES) or that it should be included in the master .chm file ( NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. GENERATE_CHI = NO # The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc) # and project file content. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_INDEX_ENCODING = # The BINARY_TOC flag controls whether a binary table of contents is generated ( # YES) or a normal table of contents ( NO) in the .chm file. Furthermore it # enables the Previous and Next buttons. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members to # the table of contents of the HTML help documentation and to the tree view. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help # (.qch) of the generated HTML documentation. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_QHP = @MITK_DOXYGEN_GENERATE_QHP@ # If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify # the file name of the resulting .qch file. The path specified is relative to # the HTML output folder. # This tag requires that the tag GENERATE_QHP is set to YES. QCH_FILE = @MITK_DOXYGEN_QCH_FILE@ # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace # (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_NAMESPACE = "org.mitk" # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual # Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- # folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_VIRTUAL_FOLDER = MITK # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- # filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- # filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: # http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = # The QHG_LOCATION tag can be used to specify the location of Qt's # qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the # generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = @QT_HELPGENERATOR_EXECUTABLE@ # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be # generated, together with the HTML files, they form an Eclipse help plugin. To # install this plugin and make it available under the help contents menu in # Eclipse, the contents of the directory containing the HTML and XML files needs # to be copied into the plugins directory of eclipse. The name of the directory # within the plugins directory should be the same as the ECLIPSE_DOC_ID value. # After copying Eclipse needs to be restarted before the help appears. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_ECLIPSEHELP = NO # A unique identifier for the Eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have this # name. Each documentation set should have its own identifier. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ECLIPSE_DOC_ID = org.doxygen.Project # If you want full control over the layout of the generated HTML pages it might # be necessary to disable the index and replace it with your own. The # DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top # of each HTML page. A value of NO enables the index and the value YES disables # it. Since the tabs in the index contain the same information as the navigation # tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. DISABLE_INDEX = NO # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. If the tag # value is set to YES, a side panel will be generated containing a tree-like # index structure (just like the one that is generated for HTML Help). For this # to work a browser that supports JavaScript, DHTML, CSS and frames is required # (i.e. any modern browser). Windows users are probably better off using the # HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can # further fine-tune the look of the index. As an example, the default style # sheet generated by doxygen has an example that shows how to put an image at # the root of the tree instead of the PROJECT_NAME. Since the tree basically has # the same information as the tab index, you could consider setting # DISABLE_INDEX to YES when enabling this option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_TREEVIEW = YES # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # doxygen will group on one line in the generated HTML documentation. # # Note that a value of 0 will completely suppress the enum values from appearing # in the overview section. # Minimum value: 0, maximum value: 20, default value: 4. # This tag requires that the tag GENERATE_HTML is set to YES. ENUM_VALUES_PER_LINE = 4 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used # to set the initial width (in pixels) of the frame in which the tree is shown. # Minimum value: 0, maximum value: 1500, default value: 250. # This tag requires that the tag GENERATE_HTML is set to YES. TREEVIEW_WIDTH = 300 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to # external symbols imported via tag files in a separate window. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. EXT_LINKS_IN_WINDOW = NO # Use this tag to change the font size of LaTeX formulas included as images in # the HTML documentation. When you change the font size after a successful # doxygen run you need to manually remove any form_*.png images from the HTML # output directory to force them to be regenerated. # Minimum value: 8, maximum value: 50, default value: 10. # This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are not # supported properly for IE 6.0, but are supported on all modern browsers. # # Note that when changing this option you need to delete any form_*.png files in # the HTML output directory before the changes have effect. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_TRANSPARENT = YES # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see # http://www.mathjax.org) which uses client side Javascript for the rendering # instead of using prerendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path # to it using the MATHJAX_RELPATH option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. USE_MATHJAX = YES # When MathJax is enabled you can set the default output format to be used for # the MathJax output. See the MathJax site (see: # http://docs.mathjax.org/en/latest/output.html) for more details. # Possible values are: HTML-CSS (which is slower, but has the best # compatibility), NativeMML (i.e. MathML) and SVG. # The default value is: HTML-CSS. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_FORMAT = HTML-CSS # When MathJax is enabled you need to specify the location relative to the HTML # output directory using the MATHJAX_RELPATH option. The destination directory # should contain the MathJax.js script. For instance, if the mathjax directory # is located at the same level as the HTML output directory, then # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of # MathJax from http://www.mathjax.org before deployment. # The default value is: http://cdn.mathjax.org/mathjax/latest. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = http://www.mathjax.org/mathjax # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_EXTENSIONS = # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # of code that will be used on startup of the MathJax code. See the MathJax site # (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an # example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_CODEFILE = # When the SEARCHENGINE tag is enabled doxygen will generate a search box for # the HTML output. The underlying search engine uses javascript and DHTML and # should work on any modern browser. Note that when using HTML help # (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) # there is already a search function so this one should typically be disabled. # For large projects the javascript based search engine can be slow, then # enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to # search using the keyboard; to jump to the search box use + S # (what the is depends on the OS and browser, but it is typically # , /