CTK  0.1.0
The Common Toolkit is a community effort to provide support code for medical image analysis, surgical navigation, and related projects.
ctkFunctionGetIncludeDirs.cmake
Go to the documentation of this file.
1 ###########################################################################
2 #
3 # Library: CTK
4 #
5 # Copyright (c) German Cancer Research Center,
6 # Division of Medical and Biological Informatics
7 #
8 # Licensed under the Apache License, Version 2.0 (the "License");
9 # you may not use this file except in compliance with the License.
10 # You may obtain a copy of the License at
11 #
12 # http://www.apache.org/licenses/LICENSE-2.0
13 #
14 # Unless required by applicable law or agreed to in writing, software
15 # distributed under the License is distributed on an "AS IS" BASIS,
16 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 # See the License for the specific language governing permissions and
18 # limitations under the License.
19 #
20 ###########################################################################
21 
22 #! \ingroup CMakeUtilities
23 function(ctkFunctionGetIncludeDirs var_include_dirs)
24 
25  if(NOT ARGN)
26  message(FATAL_ERROR "No targets given")
27  endif()
28 
29  set(_include_dirs ${${var_include_dirs}} ${CTK_CONFIG_H_INCLUDE_DIR})
30  foreach(_target ${ARGN})
31 
32  # Add the include directories from the plugin dependencies
33  # The variable ${_target}_DEPENDENCIES is set in the
34  # macro ctkMacroValidateBuildOptions
35 
36  set(ctk_deps )
37  set(ext_deps )
38 
39  ctkMacroGetAllProjectTargetLibraries("${${_target}_DEPENDENCIES}" ctk_deps)
40  ctkMacroGetAllNonProjectTargetLibraries("${${_target}_DEPENDENCIES}" ext_deps)
41 
42  foreach(dep ${ctk_deps})
43 
44  if(${dep}_INCLUDE_SUFFIXES)
45  foreach(_suffix ${${dep}_INCLUDE_SUFFIXES})
46  list(APPEND _include_dirs ${${dep}_SOURCE_DIR}/${_suffix})
47  endforeach()
48  list(APPEND _include_dirs ${${dep}_BINARY_DIR})
49  else()
50  list(APPEND _include_dirs
51  ${${dep}_SOURCE_DIR}
52  ${${dep}_BINARY_DIR}
53  )
54  endif()
55 
56  # For external projects, CTKConfig.cmake contains variables
57  # listening the include dirs for CTK libraries and plugins
58  if(${dep}_INCLUDE_DIRS)
59  list(APPEND _include_dirs ${${dep}_INCLUDE_DIRS})
60  endif()
61  endforeach()
62 
63  foreach(dep ${ext_deps})
64 
65  if(${dep}_INCLUDE_DIRS)
66  string(REPLACE "^" ";" _ext_include_dirs "${${dep}_INCLUDE_DIRS}")
67  list(APPEND _include_dirs ${_ext_include_dirs})
68  endif()
69 
70  # This is for resolving include dependencies between
71  # libraries / plugins from external projects using CTK
72  if(${dep}_SOURCE_DIR AND ${dep}_INCLUDE_SUFFIXES)
73  foreach(_suffix ${${dep}_INCLUDE_SUFFIXES})
74  list(APPEND _include_dirs ${${dep}_SOURCE_DIR}/${_suffix})
75  endforeach()
76  list(APPEND _include_dirs ${${dep}_BINARY_DIR})
77  elseif(${dep}_SOURCE_DIR)
78  list(APPEND _include_dirs ${${dep}_SOURCE_DIR})
79  endif()
80 
81  if(${dep}_BINARY_DIR)
82  list(APPEND _include_dirs ${${dep}_BINARY_DIR})
83  endif()
84 
85  endforeach()
86 
87  endforeach()
88 
89  if(_include_dirs)
90  list(REMOVE_DUPLICATES _include_dirs)
91  endif()
92  set(${var_include_dirs} ${_include_dirs} PARENT_SCOPE)
93 
94 endfunction()