Преглед на файлове

Added support for exporting additional include dirs in plug-ins.

Sascha Zelzer преди 14 години
родител
ревизия
868713ba16
променени са 3 файла, в които са добавени 58 реда и са изтрити 12 реда
  1. 16 1
      CMake/ctkFunctionGeneratePluginUseFile.cmake
  2. 18 5
      CMake/ctkFunctionGetIncludeDirs.cmake
  3. 24 6
      CMake/ctkMacroBuildPlugin.cmake

+ 16 - 1
CMake/ctkFunctionGeneratePluginUseFile.cmake

@@ -29,8 +29,23 @@ FUNCTION(ctkFunctionGeneratePluginUseFile filename)
 
 
   SET(CTK_PLUGIN_INCLUDE_DIRS_CONFIG)
   SET(CTK_PLUGIN_INCLUDE_DIRS_CONFIG)
   FOREACH(plugin ${my_ctk_plugin_libraries})
   FOREACH(plugin ${my_ctk_plugin_libraries})
-    SET(${plugin}_INCLUDE_DIRS ${${plugin}_SOURCE_DIR} ${${plugin}_BINARY_DIR})
+    SET(${plugin}_INCLUDE_DIRS )
+
+    # The call to ctkFunctionGetIncludeDirs returns all include dirs
+    # the plugin itself needs. This does not include the plugin's
+    # source dir, so we add it explicitly.
+    IF(${plugin}_INCLUDE_SUFFIXES)
+      FOREACH(_suffix ${${plugin}_INCLUDE_SUFFIXES})
+        LIST(APPEND ${plugin}_INCLUDE_DIRS ${${plugin}_SOURCE_DIR}/${_suffix})
+      ENDFOREACH()
+    ELSE()
+      LIST(APPEND ${plugin}_INCLUDE_DIRS ${${plugin}_SOURCE_DIR})
+    ENDIF()
+
+    LIST(APPEND ${plugin}_INCLUDE_DIRS ${${plugin}_BINARY_DIR})
+
     ctkFunctionGetIncludeDirs(${plugin}_INCLUDE_DIRS ${plugin})
     ctkFunctionGetIncludeDirs(${plugin}_INCLUDE_DIRS ${plugin})
+
     SET(CTK_PLUGIN_INCLUDE_DIRS_CONFIG "${CTK_PLUGIN_INCLUDE_DIRS_CONFIG}
     SET(CTK_PLUGIN_INCLUDE_DIRS_CONFIG "${CTK_PLUGIN_INCLUDE_DIRS_CONFIG}
 SET(${plugin}_INCLUDE_DIRS \"${${plugin}_INCLUDE_DIRS}\")")
 SET(${plugin}_INCLUDE_DIRS \"${${plugin}_INCLUDE_DIRS}\")")
 
 

+ 18 - 5
CMake/ctkFunctionGetIncludeDirs.cmake

@@ -39,10 +39,18 @@ FUNCTION(ctkFunctionGetIncludeDirs var_include_dirs)
     ctkMacroGetAllNonProjectTargetLibraries("${${_target}_DEPENDENCIES}" ext_deps)
     ctkMacroGetAllNonProjectTargetLibraries("${${_target}_DEPENDENCIES}" ext_deps)
 
 
     FOREACH(dep ${ctk_deps})
     FOREACH(dep ${ctk_deps})
-      LIST(APPEND _include_dirs
-           ${${dep}_SOURCE_DIR}
-           ${${dep}_BINARY_DIR}
-           )
+
+      IF(${dep}_INCLUDE_SUFFIXES)
+        FOREACH(_suffix ${${dep}_INCLUDE_SUFFIXES})
+          LIST(APPEND _include_dirs ${${dep}_SOURCE_DIR}/${_suffix})
+        ENDFOREACH()
+        LIST(APPEND _include_dirs ${${dep}_BINARY_DIR})
+      ELSE()
+        LIST(APPEND _include_dirs
+             ${${dep}_SOURCE_DIR}
+             ${${dep}_BINARY_DIR}
+             )
+      ENDIF()
 
 
       # For external projects, CTKConfig.cmake contains variables
       # For external projects, CTKConfig.cmake contains variables
       # listening the include dirs for CTK libraries and plugins
       # listening the include dirs for CTK libraries and plugins
@@ -60,7 +68,12 @@ FUNCTION(ctkFunctionGetIncludeDirs var_include_dirs)
 
 
       # This is for resolving include dependencies between
       # This is for resolving include dependencies between
       # libraries / plugins from external projects using CTK
       # libraries / plugins from external projects using CTK
-      IF(${dep}_SOURCE_DIR)
+      IF(${dep}_SOURCE_DIR AND ${dep}_INCLUDE_SUFFIXES)
+        FOREACH(_suffix ${${dep}_INCLUDE_SUFFIXES})
+          LIST(APPEND _include_dirs ${${dep}_SOURCE_DIR}/${_suffix})
+        ENDFOREACH()
+        LIST(APPEND _include_dirs ${${dep}_BINARY_DIR})
+      ELSEIF(${dep}_SOURCE_DIR)
         LIST(APPEND _include_dirs ${${dep}_SOURCE_DIR})
         LIST(APPEND _include_dirs ${${dep}_SOURCE_DIR})
       ENDIF()
       ENDIF()
 
 

+ 24 - 6
CMake/ctkMacroBuildPlugin.cmake

@@ -47,7 +47,7 @@
 #
 #
 MACRO(ctkMacroBuildPlugin)
 MACRO(ctkMacroBuildPlugin)
   CtkMacroParseArguments(MY
   CtkMacroParseArguments(MY
-    "EXPORT_DIRECTIVE;SRCS;MOC_SRCS;UI_FORMS;INCLUDE_DIRECTORIES;TARGET_LIBRARIES;RESOURCES;CACHED_RESOURCEFILES;TRANSLATIONS;LIBRARY_TYPE"
+    "EXPORT_DIRECTIVE;SRCS;MOC_SRCS;UI_FORMS;INCLUDE_DIRECTORIES;EXPORTED_INCLUDE_SUFFIXES;TARGET_LIBRARIES;RESOURCES;CACHED_RESOURCEFILES;TRANSLATIONS;LIBRARY_TYPE;OUTPUT_DIR"
     "TEST_PLUGIN"
     "TEST_PLUGIN"
     ${ARGN}
     ${ARGN}
     )
     )
@@ -99,11 +99,29 @@ MACRO(ctkMacroBuildPlugin)
 
 
   # --------------------------------------------------------------------------
   # --------------------------------------------------------------------------
   # Include dirs
   # Include dirs
-  SET(my_includes
-    ${CMAKE_CURRENT_SOURCE_DIR}
-    ${CMAKE_CURRENT_BINARY_DIR}
-    ${MY_INCLUDE_DIRECTORIES}
-    )
+  IF(MY_EXPORTED_INCLUDE_SUFFIXES)
+    SET(${lib_name}_INCLUDE_SUFFIXES ${MY_EXPORTED_INCLUDE_SUFFIXES}
+        CACHE INTERNAL "List of exported plugin include dirs")
+
+    SET(my_includes )
+    FOREACH(_suffix ${MY_EXPORTED_INCLUDE_SUFFIXES})
+      LIST(APPEND my_includes ${CMAKE_CURRENT_SOURCE_DIR}/${_suffix})
+    ENDFOREACH()
+
+    LIST(APPEND my_includes
+         ${CMAKE_CURRENT_BINARY_DIR}
+         ${MY_INCLUDE_DIRECTORIES}
+         )
+  ELSE()
+    SET(${lib_name}_INCLUDE_SUFFIXES ${MY_EXPORTED_INCLUDE_SUFFIXES}  ""
+        CACHE INTERNAL "List of exported plugin include dirs")
+
+    SET(my_includes
+        ${CMAKE_CURRENT_SOURCE_DIR}
+        ${CMAKE_CURRENT_BINARY_DIR}
+        ${MY_INCLUDE_DIRECTORIES}
+        )
+  ENDIF()
 
 
   # Add the include directories from the plugin dependencies
   # Add the include directories from the plugin dependencies
   # and external dependencies
   # and external dependencies