Browse Source

Added a verification step for plugin names. Fixes #232.

Sascha Zelzer 12 years ago
parent
commit
b6f887ddb9
1 changed files with 35 additions and 14 deletions
  1. 35 14
      CMake/ctkMacroSetupPlugins.cmake

+ 35 - 14
CMake/ctkMacroSetupPlugins.cmake

@@ -118,35 +118,56 @@ macro(ctkMacroSetupPlugins )
     get_filename_component(QT_INSTALLED_LIBRARY_DIR ${QT_QMAKE_EXECUTABLE} PATH)
   endif()
 
+  set(plugin_symbolic_names )
+  set(plugin_targets )
+  foreach(plugin ${plugin_list})
+    ctkFunctionExtractOptionNameAndValue(${plugin} plugin_dir plugin_value)
+    string(REPLACE "/" ";" _tokens ${plugin_dir})
+    list(GET _tokens -1 plugin_symbolic_name)
+    list(APPEND plugin_symbolic_names ${plugin_symbolic_name})
+    
+    string(REPLACE "." "_" plugin_target ${plugin_symbolic_name})
+    list(APPEND plugin_targets ${plugin_target})
+    
+    set(${plugin_symbolic_name}_plugin_dir ${plugin_dir})
+    set(${plugin_symbolic_name}_plugin_value ${plugin_value})
+  endforeach()
+
+  # Check if the plugin symbolic names are valid for the current project
+  ctkMacroGetAllNonProjectTargetLibraries("${plugin_targets}" invalid_targets)
+  if(invalid_targets)
+    set(invalid_plugins )
+    foreach(plugin_target ${invalid_targets})
+      string(REPLACE "_" "." plugin_symbolic_name ${plugin_target})
+      list(APPEND invalid_plugins ${plugin_symbolic_name})
+    endforeach()
+    message(FATAL_ERROR "The following plug-ins are using invalid symbolic names: ${invalid_plugins}")
+  endif()
+  
   set(plugin_dirswithoption )
   set(plugin_subdirs )
-  foreach(plugin ${plugin_list})
-    ctkFunctionExtractOptionNameAndValue(${plugin} plugin_name plugin_value)
+  foreach(plugin_symbolic_name ${plugin_symbolic_names})
     if(MY_COMPACT_OPTIONS)
-      string(REPLACE "/" ";" _tokens ${plugin_name})
-      list(GET _tokens -1 option_name)
-      set(option_name ${MY_BUILD_OPTION_PREFIX}${option_name})
+      set(option_name ${MY_BUILD_OPTION_PREFIX}${plugin_symbolic_name})
     else()
-      set(option_name ${MY_BUILD_OPTION_PREFIX}${plugin_name})
+      set(option_name ${MY_BUILD_OPTION_PREFIX}${${plugin_symbolic_name}_plugin_dir})
     endif()
     # This variable may have the form "Plugins/org.commontk.bla_option_name"
-    set(${plugin_name}_option_name ${option_name})
+    set(${${plugin_symbolic_name}_plugin_dir}_option_name ${option_name})
     # Additionally create a variable of the form "org_commontk_bla_option_name"
-    string(REPLACE "/" ";" _tokens ${plugin_name})
-    list(GET _tokens -1 plugin_symbolic_name)
     string(REPLACE "." "_" plugin_target ${plugin_symbolic_name})
     set(${plugin_target}_option_name ${option_name})
 
-    option(${option_name} "Build ${plugin_name} Plugin." ${plugin_value})
+    option(${option_name} "Build the ${plugin_symbolic_name} Plugin." ${${plugin_symbolic_name}_plugin_value})
     if(MY_BUILD_ALL)
       set(${option_name} 1)
     endif()
 
-    list(APPEND plugin_subdirs "${plugin_name}")
-    if(IS_ABSOLUTE ${plugin_name})
-      list(APPEND plugin_dirswithoption "${plugin_name}^^${option_name}")
+    list(APPEND plugin_subdirs "${${plugin_symbolic_name}_plugin_dir}")
+    if(IS_ABSOLUTE ${${plugin_symbolic_name}_plugin_dir})
+      list(APPEND plugin_dirswithoption "${${plugin_symbolic_name}_plugin_dir}^^${option_name}")
     else()
-      list(APPEND plugin_dirswithoption "${CMAKE_CURRENT_SOURCE_DIR}/${plugin_name}^^${option_name}")
+      list(APPEND plugin_dirswithoption "${CMAKE_CURRENT_SOURCE_DIR}/${${plugin_symbolic_name}_plugin_dir}^^${option_name}")
     endif()
   endforeach()