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
23function(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
94endfunction()