aboutsummaryrefslogtreecommitdiff
path: root/find-modules/FindKF5.cmake
blob: ccf2bbd720c8e9ac8571cf009b2c67c2472213b1 (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
# 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
                          kcoreaddons
                          kdbusaddons
                          kplotting
                          kwindowsystem
                          solid
                          threadweaver)

set(knownComponentsTier2  kauth )

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
                                  )