aboutsummaryrefslogtreecommitdiff
path: root/find-modules/FindKF5.cmake
blob: b19db2ccdbe9bada69c614649d5dcfc157920b33 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# hmm, any better ideas ?
set(KF5_VERSION_STRING "5.0.0")

# we probably only want to search known components, so people don't start
# misusing this file for searching their own libraries.

set(knownComponentsTier1  itemmodels
                          karchive
                          kcodecs
                          kcoreaddons
                          kdbusaddons
                          kidletime
                          kplotting
                          kwidgetsaddons
                          kwindowsystem
                          solid
                          threadweaver)

set(knownComponentsTier2  kauth
                          kconfig)

set(knownComponentsTier3   )

set(allKnownComponents Compiler CMake InstallDirs ${knownComponentsTier1} ${knownComponentsTier2} ${knownComponentsTier3} )

set(cmakeCompRequested FALSE)
set(compilerCompRequested FALSE)
set(installDirsCompRequested FALSE)

unset(unknownComponents)

set(firstComponent )
set(followingComponents )

# iterate through the list of requested components, and check that we know them all.
# If not, fail.
foreach(comp ${KF5_FIND_COMPONENTS})
   list(FIND allKnownComponents ${comp} index )
   if("${index}" STREQUAL "-1")
      list(APPEND unknownComponents "${comp}")
   else()
      if("${comp}" STREQUAL "CMake")
         set(cmakeCompRequested TRUE)
      elseif("${comp}" STREQUAL "Compiler")
         set(compilerCompRequested TRUE)
      elseif("${comp}" STREQUAL "InstallDirs")
         set(installDirsCompRequested TRUE)
      else()
         if(NOT firstComponent)
            set(firstComponent "${comp}")
         else()
            list(APPEND followingComponents "${comp}")
         endif()
      endif()
   endif()
endforeach()


if(DEFINED unknownComponents)
   set(msgType STATUS)
   if(KF5_FIND_REQUIRED)
      set(msgType FATAL_ERROR)
   endif()
   message(${msgType} "KF5: requested unknown components ${unknownComponents}")
   return()
endif()


if(installDirsCompRequested)
   include(${CMAKE_CURRENT_LIST_DIR}/../kde-modules/KDEInstallDirs.cmake)
   set(KF5_InstallDirs_FOUND TRUE)
endif()

if(cmakeCompRequested)
   include(${CMAKE_CURRENT_LIST_DIR}/../kde-modules/KDECMakeSettings.cmake)
   set(KF5_CMake_FOUND TRUE)
endif()

if(compilerCompRequested)
   include(${CMAKE_CURRENT_LIST_DIR}/../kde-modules/KDECompilerSettings.cmake)
   set(KF5_Compiler_FOUND TRUE)
endif()


if(firstComponent)
   file(TO_CMAKE_PATH "$ENV{KDEDIRS}" _KDEDIRS)

   set(_CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} )
   set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${_KDEDIRS} )

   find_package(${firstComponent}  ${KF5_FIND_VERSION} CONFIG )

   set(KF5_File "${${firstComponent}_CONFIG}}")

   if(${firstComponent}_CONFIG)
      set(KF5_${firstComponent}_FOUND TRUE)
      if(NOT DEFINED ${firstComponent}_INSTALL_PREFIX)
         message(STATUS "${firstComponent} does not set ${firstComponent}_INSTALL_PREFIX !")
      endif()
   endif()

   # search for the other components first in the same directory where the first one
   # has been found, and additionally in KDEDIRS. This is to make sure we don't
   # get a random mix of installed KDE libraries.
   set(CMAKE_PREFIX_PATH ${${firstComponent}_INSTALL_PREFIX} ${_KDEDIRS})

   foreach(comp ${followingComponents})
      find_package(${comp} ${KF5_FIND_VERSION} CONFIG
                   NO_CMAKE_ENVIRONMENT_PATH
                   NO_SYSTEM_ENVIRONMENT_PATH
                   NO_CMAKE_BUILDS_PATH
                   NO_CMAKE_PACKAGE_REGISTRY
                   NO_CMAKE_SYSTEM_PATH
                   NO_CMAKE_SYSTEM_PACKAGE_REGISTRY
                 )
      if(${comp}_CONFIG)
         set(KF5_${comp}_FOUND TRUE)
      endif()
      message(STATUS "${comp}: ${${comp}_CONFIG}")
   endforeach()

   set(CMAKE_PREFIX_PATH ${_CMAKE_PREFIX_PATH} )
else()
   set(KF5_File "${CMAKE_CURRENT_LIST_FILE}")
endif()

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(KF5
                                  REQUIRED_VARS KF5_File
                                  VERSION_VAR KF5_VERSION_STRING
                                  HANDLE_COMPONENTS
                                  )