Sfoglia il codice sorgente

Merge branch 'customize-plugin-output-dirs'

* customize-plugin-output-dirs:
  Use CTK_PLUGIN_<type>_OUTPUT_DIRECTORY vars for customization.
  Use CTK_PLUGIN_DIR from ctkConfig.h instead of hard-coded dirs.
Sascha Zelzer 13 anni fa
parent
commit
6af583b881

+ 3 - 2
Applications/ctkExampleHost/ctkExampleHostMain.cpp

@@ -32,6 +32,7 @@
 #include <QUrl>
 
 // CTKPluginFramework includes
+#include <ctkConfig.h>
 #include <ctkPluginFrameworkFactory.h>
 #include <ctkPluginFramework.h>
 #include <ctkPluginException.h>
@@ -67,9 +68,9 @@ int main(int argv, char** argc)
     }
 
 #ifdef CMAKE_INTDIR
-  QString pluginPath = qApp->applicationDirPath() + "/../plugins/" CMAKE_INTDIR "/";
+  QString pluginPath = CTK_PLUGIN_DIR CMAKE_INTDIR "/";
 #else
-  QString pluginPath = qApp->applicationDirPath() + "/plugins/";
+  QString pluginPath = CTK_PLUGIN_DIR;
 #endif
 
   qApp->addLibraryPath(pluginPath);

+ 3 - 2
Applications/ctkExampleHostedApp/ctkExampleHostedAppMain.cpp

@@ -30,6 +30,7 @@
 #include <QDebug>
 
 // CTK includes
+#include <ctkConfig.h>
 #include <ctkCommandLineParser.h>
 #include <ctkPluginFrameworkFactory.h>
 #include <ctkPluginFramework.h>
@@ -110,9 +111,9 @@ int main(int argv, char** argc)
     }
 
 #ifdef CMAKE_INTDIR
-  QString pluginPath = qApp->applicationDirPath() + "/../plugins/" CMAKE_INTDIR "/";
+  QString pluginPath = CTK_PLUGIN_DIR CMAKE_INTDIR "/";
 #else
-  QString pluginPath = qApp->applicationDirPath() + "/plugins/";
+  QString pluginPath = CTK_PLUGIN_DIR;
 #endif
 
   qApp->addLibraryPath(pluginPath);

+ 3 - 2
Applications/ctkPluginBrowser/ctkPluginBrowser.cpp

@@ -30,6 +30,7 @@
 
 #include <ui_ctkPluginBrowserMainWindow.h>
 
+#include <ctkConfig.h>
 #include <ctkPluginException.h>
 #include <ctkPluginFramework.h>
 #include <ctkPluginContext.h>
@@ -65,9 +66,9 @@ ctkPluginBrowser::ctkPluginBrowser(ctkPluginFramework* framework)
 
   QStringList pluginDirs;
 #ifdef CMAKE_INTDIR
-  pluginDirs << qApp->applicationDirPath() + "/../plugins/" CMAKE_INTDIR "/";
+  pluginDirs << CTK_PLUGIN_DIR CMAKE_INTDIR "/";
 #else
-  pluginDirs << qApp->applicationDirPath() + "/plugins/";
+  pluginDirs << CTK_PLUGIN_DIR;
 #endif
 
   QStringListIterator dirIt(pluginDirs);

+ 3 - 2
Applications/ctkPluginGenerator/ctkPluginGeneratorMain.cpp

@@ -19,6 +19,7 @@
 
 =============================================================================*/
 
+#include <ctkConfig.h>
 #include <ctkPluginFrameworkFactory.h>
 #include <ctkPluginFramework.h>
 #include <ctkPluginException.h>
@@ -73,9 +74,9 @@ int main(int argv, char** argc)
   }
 
 #ifdef CMAKE_INTDIR
-  QString pluginPath = qApp->applicationDirPath() + "/../plugins/" CMAKE_INTDIR "/";
+  QString pluginPath = CTK_PLUGIN_DIR CMAKE_INTDIR "/";
 #else
-  QString pluginPath = qApp->applicationDirPath() + "/plugins/";
+  QString pluginPath = CTK_PLUGIN_DIR;
 #endif
 
   qApp->addLibraryPath(pluginPath);

+ 1 - 1
CMake/ctkFunctionGetIncludeDirs.cmake

@@ -26,7 +26,7 @@ FUNCTION(ctkFunctionGetIncludeDirs var_include_dirs)
     MESSAGE(FATAL_ERROR "No targets given")
   ENDIF()
 
-  SET(_include_dirs ${${var_include_dirs}})
+  SET(_include_dirs ${${var_include_dirs}} ${CTK_CONFIG_H_INCLUDE_DIR})
   FOREACH(_target ${ARGN})
 
     # Add the include directories from the plugin dependencies

+ 28 - 18
CMake/ctkMacroBuildPlugin.cmake

@@ -256,25 +256,34 @@ MACRO(ctkMacroBuildPlugin)
 
   # Set the output directory for the plugin
   IF(MY_OUTPUT_DIR)
-    SET(output_dir_suffix ${MY_OUTPUT_DIR})
+    SET(output_dir_suffix "/${MY_OUTPUT_DIR}")
   ELSE()
-    SET(output_dir_suffix "plugins")
+    SET(output_dir_suffix "")
   ENDIF()
 
-  IF(MY_TEST_PLUGIN)
-    SET(output_dir_suffix "test_${output_dir_suffix}")
-  ENDIF()
-
-  IF(CMAKE_RUNTIME_OUTPUT_DIRECTORY)
-    SET(runtime_output_dir "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${output_dir_suffix}")
-  ELSE()
-    SET(runtime_output_dir "${CMAKE_CURRENT_BINARY_DIR}/${output_dir_suffix}")
-  ENDIF()
-  IF(CMAKE_LIBRARY_OUTPUT_DIRECTORY)
-    SET(library_output_dir "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${output_dir_suffix}")
-  ELSE()
-    SET(library_output_dir "${CMAKE_CURRENT_BINARY_DIR}/${output_dir_suffix}")
-  ENDIF()
+  FOREACH(type RUNTIME LIBRARY ARCHIVE)
+    IF(NOT DEFINED CTK_PLUGIN_${type}_OUTPUT_DIRECTORY AND CMAKE_${type}_OUTPUT_DIRECTORY)
+      # Put plug-ins by default into a "plugins" subdirectory
+      SET(CTK_PLUGIN_${type}_OUTPUT_DIRECTORY "${CMAKE_${type}_OUTPUT_DIRECTORY}/plugins")
+    ENDIF()
+    
+    IF(IS_ABSOLUTE "${CTK_PLUGIN_${type}_OUTPUT_DIRECTORY}")
+      SET(plugin_${type}_output_dir "${CTK_PLUGIN_${type}_OUTPUT_DIRECTORY}${output_dir_suffix}")
+    ELSEIF(CMAKE_${type}_OUTPUT_DIRECTORY)
+      SET(plugin_${type}_output_dir "${CMAKE_${type}_OUTPUT_DIRECTORY}/${CTK_PLUGIN_${type}_OUTPUT_DIRECTORY}${output_dir_suffix}")
+    ELSE()
+      SET(plugin_${type}_output_dir "${CMAKE_CURRENT_BINARY_DIR}/${CTK_PLUGIN_${type}_OUTPUT_DIRECTORY}${output_dir_suffix}")
+    ENDIF()
+
+    IF(MY_TEST_PLUGIN)
+      # Test plug-ins will always be put in a separate directory
+      IF(CMAKE_${type}_OUTPUT_DIRECTORY)
+        SET(plugin_${type}_output_dir "${CMAKE_${type}_OUTPUT_DIRECTORY}/test_plugins")
+      ELSE()
+        SET(plugin_${type}_output_dir "${PROJECT_BINARY_DIR}/test_plugins")
+      ENDIF()
+    ENDIF()
+  ENDFOREACH()
 
   SET(plugin_compile_flags "-DQT_PLUGIN")
 
@@ -295,8 +304,9 @@ MACRO(ctkMacroBuildPlugin)
   # Apply properties to the library target.
   SET_TARGET_PROPERTIES(${lib_name} PROPERTIES
     COMPILE_FLAGS "${plugin_compile_flags}"
-    RUNTIME_OUTPUT_DIRECTORY ${runtime_output_dir}
-    LIBRARY_OUTPUT_DIRECTORY ${library_output_dir}
+    RUNTIME_OUTPUT_DIRECTORY ${plugin_RUNTIME_output_dir}
+    LIBRARY_OUTPUT_DIRECTORY ${plugin_LIBRARY_output_dir}
+    ARCHIVE_OUTPUT_DIRECTORY ${plugin_ARCHIVE_output_dir}
     PREFIX "lib"
     )
 

+ 11 - 1
CMakeLists.txt

@@ -108,6 +108,9 @@ FOREACH(type LIBRARY RUNTIME ARCHIVE)
     ENDIF()
   ENDIF()
   SET(CMAKE_${type}_OUTPUT_DIRECTORY ${output_dir} CACHE INTERNAL "Single output directory for building all libraries.")
+  IF(NOT DEFINED CTK_PLUGIN_${type}_OUTPUT_DIRECTORY)
+    SET(CTK_PLUGIN_${type}_OUTPUT_DIRECTORY ${CMAKE_${type}_OUTPUT_DIRECTORY})
+  ENDIF()
 ENDFOREACH()
 
 #-----------------------------------------------------------------------------
@@ -594,6 +597,12 @@ IF(CTK_SUPERBUILD)
   RETURN()
 ENDIF()
 
+
+#=============================================================================
+# End of Superbuild
+#=============================================================================
+
+
 #-----------------------------------------------------------------------------
 # Expand variables containing include and library directories for external projects
 # This relies on the variable EXTERNAL_TARGETS set in ctkMacroValidateBuildOptions
@@ -660,10 +669,11 @@ ENDIF()
 #-----------------------------------------------------------------------------
 # Configure files with settings
 #
-
 CONFIGURE_FILE(${CTK_SOURCE_DIR}/UseCTK.cmake.in
                ${CTK_SUPERBUILD_BINARY_DIR}/UseCTK.cmake COPYONLY IMMEDIATE)
 
+SET(CTK_CONFIG_H_INCLUDE_DIR ${CTK_BINARY_DIR})
+
 #-----------------------------------------------------------------------------
 # Set C/CXX Flags
 #

+ 3 - 0
CTKConfig.cmake.in

@@ -67,6 +67,9 @@ INCLUDE("@CTK_CMAKE_DIR_CONFIG@/ctkMacroSetupExternalPlugins.cmake")
 
 SET(CTK_EXPORT_HEADER_TEMPLATE "@CTK_EXPORT_HEADER_TEMPLATE@")
 
+# Directory containing the ctkConfig.h file
+SET(CTK_CONFIG_H_INCLUDE_DIR @CTK_CONFIG_H_INCLUDE_DIR@)
+
 # The CTK DGraph executable used to compute target dependency graphs
 SET(CTK_DGRAPH_EXECUTABLE "@DGraph_EXECUTABLE@")
 

+ 3 - 15
Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginD_test/CMakeLists.txt

@@ -13,23 +13,11 @@ INCLUDE(${QT_USE_FILE})
 ADD_LIBRARY(${lib_name} SHARED ${PLUGIN_SRCS})
 TARGET_LINK_LIBRARIES(${lib_name} ${QT_LIBRARIES})
 
-# Set the output directory for the plugin
-SET(output_dir_suffix "test_plugins")
-IF(CMAKE_RUNTIME_OUTPUT_DIRECTORY)
-  SET(runtime_output_dir "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${output_dir_suffix}")
-ELSE()
-  SET(runtime_output_dir "${CMAKE_CURRENT_BINARY_DIR}/${output_dir_suffix}")
-ENDIF()
-IF(CMAKE_LIBRARY_OUTPUT_DIRECTORY)
-  SET(library_output_dir "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${output_dir_suffix}")
-ELSE()
-  SET(library_output_dir "${CMAKE_CURRENT_BINARY_DIR}/${output_dir_suffix}")
-ENDIF()
-
 # Apply properties to the library target.
 SET_TARGET_PROPERTIES(${lib_name} PROPERTIES
 #    COMPILE_FLAGS "-DQT_PLUGIN"
-    RUNTIME_OUTPUT_DIRECTORY ${runtime_output_dir}
-    LIBRARY_OUTPUT_DIRECTORY ${library_output_dir}
+    RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test_plugins
+    LIBRARY_OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/test_plugins
+    ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/test_plugins
     PREFIX "lib"
     )

+ 3 - 2
Plugins/org.commontk.configadmin/Testing/Cpp/ctkConfigAdminImplTestMain.cpp

@@ -22,6 +22,7 @@
 
 #include <QCoreApplication>
 
+#include <ctkConfig.h>
 #include <ctkPluginConstants.h>
 
 #include <Testing/Cpp/ctkPluginFrameworkTestRunner.h>
@@ -39,9 +40,9 @@ int main(int argc, char** argv)
 
   QString pluginDir;
 #ifdef CMAKE_INTDIR
-  pluginDir = qApp->applicationDirPath() + "/../plugins/" CMAKE_INTDIR "/";
+  pluginDir = CTK_PLUGIN_DIR CMAKE_INTDIR "/";
 #else
-  pluginDir = qApp->applicationDirPath() + "/plugins/";
+  pluginDir = CTK_PLUGIN_DIR;
 #endif
 
   QString testpluginDir;

+ 3 - 2
Plugins/org.commontk.eventadmin/Testing/Cpp/ctkEventAdminImplTestMain.cpp

@@ -22,6 +22,7 @@
 
 #include <QCoreApplication>
 
+#include <ctkConfig.h>
 #include <ctkPluginConstants.h>
 
 #include <Testing/Cpp/ctkPluginFrameworkTestRunner.h>
@@ -39,9 +40,9 @@ int main(int argc, char** argv)
 
   QString pluginDir;
 #ifdef CMAKE_INTDIR
-  pluginDir = qApp->applicationDirPath() + "/../plugins/" CMAKE_INTDIR "/";
+  pluginDir = CTK_PLUGIN_DIR CMAKE_INTDIR "/";
 #else
-  pluginDir = qApp->applicationDirPath() + "/plugins/";
+  pluginDir = CTK_PLUGIN_DIR;
 #endif
 
   QString testpluginDir;

+ 3 - 2
Plugins/org.commontk.metatype/Testing/Cpp/ctkMetaTypeImplTestMain.cpp

@@ -22,6 +22,7 @@
 
 #include <QCoreApplication>
 
+#include <ctkConfig.h>
 #include <ctkPluginConstants.h>
 
 #include <Testing/Cpp/ctkPluginFrameworkTestRunner.h>
@@ -39,9 +40,9 @@ int main(int argc, char** argv)
 
   QString pluginDir;
 #ifdef CMAKE_INTDIR
-  pluginDir = qApp->applicationDirPath() + "/../plugins/" CMAKE_INTDIR "/";
+  pluginDir = CTK_PLUGIN_DIR CMAKE_INTDIR "/";
 #else
-  pluginDir = qApp->applicationDirPath() + "/plugins/";
+  pluginDir = CTK_PLUGIN_DIR;
 #endif
 
   QString testpluginDir;

+ 17 - 1
Utilities/LastConfigureStep/CTKGenerateCTKConfig.cmake

@@ -105,6 +105,22 @@ SET(CTK_INCLUDE_DIRS_CONFIG
 # Library directory.
 SET(CTK_LIBRARY_DIRS_CONFIG ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
 
+# Plug-in output directory
+IF(WIN32)
+  SET(_plugin_output_type "RUNTIME")
+ELSE()
+  SET(_plugin_output_type "LIBRARY")
+ENDIF()
+IF(DEFINED CTK_PLUGIN_${_plugin_output_type}_OUTPUT_DIRECTORY)
+  IF(IS_ABSOLUTE "${CTK_PLUGIN_${_plugin_output_type}_OUTPUT_DIRECTORY}")
+    SET(CTK_PLUGIN_LIBRARIES_DIR_CONFIG "${CTK_PLUGIN_${_plugin_output_type}_OUTPUT_DIRECTORY}")
+  ELSE()
+    SET(CTK_PLUGIN_LIBRARIES_DIR_CONFIG "${CMAKE_${_plugin_output_type}_OUTPUT_DIRECTORY}/${CTK_PLUGIN_${_plugin_output_type}_OUTPUT_DIRECTORY}")
+  ENDIF()
+ELSE()
+  SET(CTK_PLUGIN_LIBRARIES_DIR_CONFIG "${CMAKE_${_plugin_output_type}_OUTPUT_DIRECTORY}/plugins")
+ENDIF()
+
 # External project libraries.
 SET(CTK_EXTERNAL_LIBRARIES_CONFIG ${CTK_EXTERNAL_LIBRARIES})
 
@@ -146,7 +162,7 @@ CONFIGURE_FILE(${CTK_SOURCE_DIR}/CTKConfig.cmake.in
 CONFIGURE_FILE(${CTK_SOURCE_DIR}/CTKConfigVersion.cmake.in
                ${CTK_SUPERBUILD_BINARY_DIR}/CTKConfigVersion.cmake @ONLY IMMEDIATE)
 CONFIGURE_FILE(${CTK_SOURCE_DIR}/ctkConfig.h.in
-               ${CTK_SUPERBUILD_BINARY_DIR}/ctkConfig.h @ONLY IMMEDIATE)
+               ${CTK_CONFIG_H_INCLUDE_DIR}/ctkConfig.h @ONLY IMMEDIATE)
 
 #-----------------------------------------------------------------------------
 # Settings specific to the install tree.

+ 1 - 1
ctkConfig.h.in

@@ -1,7 +1,7 @@
 #ifndef __ctkConfig_h
 #define __ctkConfig_h
 
-#define CTK_PLUGIN_DIR "@CTK_BINARY_DIR@/bin/plugins/"
+#define CTK_PLUGIN_DIR "@CTK_PLUGIN_LIBRARIES_DIR_CONFIG@/"
 
 #endif