FindKDE3.cmake 10.5 KB
Newer Older
1 2 3 4 5 6 7
#.rst:
# FindKDE3
# --------
#
# Find the KDE3 include and library dirs, KDE preprocessors and define a some macros
#
#
8 9
#
# This module defines the following variables:
10
#
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
# ``KDE3_DEFINITIONS``
#   compiler definitions required for compiling KDE software
# ``KDE3_INCLUDE_DIR``
#   the KDE include directory
# ``KDE3_INCLUDE_DIRS``
#   the KDE and the Qt include directory, for use with include_directories()
# ``KDE3_LIB_DIR``
#   the directory where the KDE libraries are installed, for use with link_directories()
# ``QT_AND_KDECORE_LIBS``
#   this contains both the Qt and the kdecore library
# ``KDE3_DCOPIDL_EXECUTABLE``
#   the dcopidl executable
# ``KDE3_DCOPIDL2CPP_EXECUTABLE``
#   the dcopidl2cpp executable
# ``KDE3_KCFGC_EXECUTABLE``
#   the kconfig_compiler executable
# ``KDE3_FOUND``
#   set to TRUE if all of the above has been found
29 30 31
#
# The following user adjustable options are provided:
#
32 33
# ``KDE3_BUILD_TESTS``
#   enable this to build KDE testcases
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
#
# It also adds the following macros (from KDE3Macros.cmake) SRCS_VAR is
# always the variable which contains the list of source files for your
# application or library.
#
# KDE3_AUTOMOC(file1 ...  fileN)
#
# ::
#
#     Call this if you want to have automatic moc file handling.
#     This means if you include "foo.moc" in the source file foo.cpp
#     a moc file for the header foo.h will be created automatically.
#     You can set the property SKIP_AUTOMAKE using set_source_files_properties()
#     to exclude some files in the list from being processed.
#
#
#
# KDE3_ADD_MOC_FILES(SRCS_VAR file1 ...  fileN )
#
# ::
#
#     If you don't use the KDE3_AUTOMOC() macro, for the files
#     listed here moc files will be created (named "foo.moc.cpp")
#
#
#
# KDE3_ADD_DCOP_SKELS(SRCS_VAR header1.h ...  headerN.h )
#
# ::
#
#     Use this to generate DCOP skeletions from the listed headers.
65 66 67
#
#
#
68
# KDE3_ADD_DCOP_STUBS(SRCS_VAR header1.h ...  headerN.h )
69
#
70
# ::
71
#
72
#      Use this to generate DCOP stubs from the listed headers.
73 74 75
#
#
#
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
# KDE3_ADD_UI_FILES(SRCS_VAR file1.ui ...  fileN.ui )
#
# ::
#
#     Use this to add the Qt designer ui files to your application/library.
#
#
#
# KDE3_ADD_KCFG_FILES(SRCS_VAR file1.kcfgc ...  fileN.kcfgc )
#
# ::
#
#     Use this to add KDE kconfig compiler files to your application/library.
#
#
91 92 93
#
# KDE3_INSTALL_LIBTOOL_FILE(target)
#
94 95 96 97 98 99 100 101 102 103
# ::
#
#     This will create and install a simple libtool file for the given target.
#
#
#
# KDE3_ADD_EXECUTABLE(name file1 ...  fileN )
#
# ::
#
104 105
#     Currently identical to add_executable(), may provide some advanced
#     features in the future.
106 107 108 109 110 111 112 113
#
#
#
# KDE3_ADD_KPART(name [WITH_PREFIX] file1 ...  fileN )
#
# ::
#
#     Create a KDE plugin (KPart, kioslave, etc.) from the given source files.
114 115
#     If WITH_PREFIX is given, the resulting plugin will have the prefix "lib",
#     otherwise it won't.
116 117 118 119 120 121 122 123 124
#     It creates and installs an appropriate libtool la-file.
#
#
#
# KDE3_ADD_KDEINIT_EXECUTABLE(name file1 ...  fileN )
#
# ::
#
#     Create a KDE application in the form of a module loadable via kdeinit.
125 126
#     A library named kdeinit_<name> will be created and a small executable
#     which links to it.
127
#
128 129
#
#
130 131
# The option KDE3_ENABLE_FINAL to enable all-in-one compilation is no
# longer supported.
132 133
#
#
134 135 136
#
# Author: Alexander Neundorf <neundorf@kde.org>

137 138 139 140 141 142 143 144 145 146 147
#=============================================================================
# Copyright 2006-2009 Kitware, Inc.
# Copyright 2006 Alexander Neundorf <neundorf@kde.org>
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
148
# (To distribute this file outside of CMake, substitute the full
149 150
#  License text for the above reference.)

151 152
if(NOT UNIX AND KDE3_FIND_REQUIRED)
   message(FATAL_ERROR "Compiling KDE3 applications and libraries under Windows is not supported")
153
endif()
154

155
# If Qt4 has already been found, fail.
156 157 158
if(QT4_FOUND)
  if(KDE3_FIND_REQUIRED)
    message( FATAL_ERROR "KDE3/Qt3 and Qt4 cannot be used together in one project.")
159
  else()
160 161
    if(NOT KDE3_FIND_QUIETLY)
      message( STATUS    "KDE3/Qt3 and Qt4 cannot be used together in one project.")
162
    endif()
163
    return()
164 165
  endif()
endif()
166

167

168 169
set(QT_MT_REQUIRED TRUE)
#set(QT_MIN_VERSION "3.0.0")
170 171

#this line includes FindQt.cmake, which searches the Qt library and headers
172 173
if(KDE3_FIND_REQUIRED)
  set(_REQ_STRING_KDE3 "REQUIRED")
174
endif()
175

176 177
find_package(Qt3 ${_REQ_STRING_KDE3})
find_package(X11 ${_REQ_STRING_KDE3})
178 179 180


#now try to find some kde stuff
181
find_program(KDECONFIG_EXECUTABLE NAMES kde-config
182
  HINTS
183
   $ENV{KDEDIR}/bin
184
   PATHS
185 186 187 188
  /opt/kde3/bin
  /opt/kde/bin
  )

189 190 191
set(KDE3PREFIX)
if(KDECONFIG_EXECUTABLE)
   execute_process(COMMAND ${KDECONFIG_EXECUTABLE} --version
192
                   OUTPUT_VARIABLE kde_config_version )
193

194 195 196
   string(REGEX MATCH "KDE: .\\." kde_version "${kde_config_version}")
   if ("${kde_version}" MATCHES "KDE: 3\\.")
      execute_process(COMMAND ${KDECONFIG_EXECUTABLE} --prefix
197
                        OUTPUT_VARIABLE kdedir )
198
      string(REPLACE "\n" "" KDE3PREFIX "${kdedir}")
199

200 201
    endif ()
endif()
202 203 204



205
# at first the KDE include directory
206
# kpassdlg.h comes from kdeui and doesn't exist in KDE4 anymore
207
find_path(KDE3_INCLUDE_DIR kpassdlg.h
208
  HINTS
209
  $ENV{KDEDIR}/include
210
  ${KDE3PREFIX}/include
211
  PATHS
212
  /opt/kde3/include
213
  /opt/kde/include
214 215
  /usr/include/kde
  /usr/local/include/kde
216 217
  )

218
#now the KDE library directory
219
find_library(KDE3_KDECORE_LIBRARY NAMES kdecore
220
  HINTS
221
  $ENV{KDEDIR}/lib
222
  ${KDE3PREFIX}/lib
223
  PATHS
224
  /opt/kde3/lib
225
  /opt/kde/lib
226 227
)

228
set(QT_AND_KDECORE_LIBS ${QT_LIBRARIES} ${KDE3_KDECORE_LIBRARY})
229

230
get_filename_component(KDE3_LIB_DIR ${KDE3_KDECORE_LIBRARY} PATH )
231

232 233 234
if(NOT KDE3_LIBTOOL_DIR)
   if(KDE3_KDECORE_LIBRARY MATCHES lib64)
     set(KDE3_LIBTOOL_DIR /lib64/kde3)
235
   else()
236
     set(KDE3_LIBTOOL_DIR /lib/kde3)
237 238
   endif()
endif()
239

240
#now search for the dcop utilities
241
find_program(KDE3_DCOPIDL_EXECUTABLE NAMES dcopidl
242
  HINTS
243
  $ENV{KDEDIR}/bin
244
  ${KDE3PREFIX}/bin
245
  PATHS
246
  /opt/kde3/bin
247
  /opt/kde/bin
248 249
  )

250
find_program(KDE3_DCOPIDL2CPP_EXECUTABLE NAMES dcopidl2cpp
251
  HINTS
252
  $ENV{KDEDIR}/bin
253
  ${KDE3PREFIX}/bin
254
  PATHS
255
  /opt/kde3/bin
256
  /opt/kde/bin
257 258
  )

259
find_program(KDE3_KCFGC_EXECUTABLE NAMES kconfig_compiler
260
  HINTS
261
  $ENV{KDEDIR}/bin
262
  ${KDE3PREFIX}/bin
263
  PATHS
264
  /opt/kde3/bin
265
  /opt/kde/bin
266
  )
267 268 269


#SET KDE3_FOUND
270 271
if (KDE3_INCLUDE_DIR AND KDE3_LIB_DIR AND KDE3_DCOPIDL_EXECUTABLE AND KDE3_DCOPIDL2CPP_EXECUTABLE AND KDE3_KCFGC_EXECUTABLE)
   set(KDE3_FOUND TRUE)
272
else ()
273
   set(KDE3_FOUND FALSE)
274
endif ()
275

276
# add some KDE specific stuff
277
set(KDE3_DEFINITIONS -DQT_CLEAN_NAMESPACE -D_GNU_SOURCE)
278 279

# set compiler flags only if KDE3 has actually been found
280 281 282 283 284
if(KDE3_FOUND)
   set(_KDE3_USE_FLAGS FALSE)
   if(CMAKE_COMPILER_IS_GNUCXX)
      set(_KDE3_USE_FLAGS TRUE) # use flags for gnu compiler
      execute_process(COMMAND ${CMAKE_CXX_COMPILER} --version
285 286 287
                      OUTPUT_VARIABLE out)
      # gnu gcc 2.96 does not work with flags
      # I guess 2.95 also doesn't then
288 289
      if("${out}" MATCHES "2.9[56]")
         set(_KDE3_USE_FLAGS FALSE)
290 291
      endif()
   endif()
292 293

   #only on linux, but NOT e.g. on FreeBSD:
294 295 296 297
   if(CMAKE_SYSTEM_NAME MATCHES "Linux" AND _KDE3_USE_FLAGS)
      set (KDE3_DEFINITIONS ${KDE3_DEFINITIONS} -D_XOPEN_SOURCE=500 -D_BSD_SOURCE)
      set ( CMAKE_C_FLAGS     "${CMAKE_C_FLAGS} -Wno-long-long -ansi -Wundef -Wcast-align -Wconversion -Wchar-subscripts -Wall -W -Wpointer-arith -Wwrite-strings -Wformat-security -Wmissing-format-attribute -fno-common")
      set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wnon-virtual-dtor -Wno-long-long -ansi -Wundef -Wcast-align -Wconversion -Wchar-subscripts -Wall -W -Wpointer-arith -Wwrite-strings -Wformat-security -fno-exceptions -fno-check-new -fno-common")
298
   endif()
299 300

   # works on FreeBSD, NOT tested on NetBSD and OpenBSD
301 302 303
   if (CMAKE_SYSTEM_NAME MATCHES BSD AND _KDE3_USE_FLAGS)
      set ( CMAKE_C_FLAGS     "${CMAKE_C_FLAGS} -Wno-long-long -ansi -Wundef -Wcast-align -Wconversion -Wchar-subscripts -Wall -W -Wpointer-arith -Wwrite-strings -Wformat-security -Wmissing-format-attribute -fno-common")
      set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wnon-virtual-dtor -Wno-long-long -Wundef -Wcast-align -Wconversion -Wchar-subscripts -Wall -W -Wpointer-arith -Wwrite-strings -Wformat-security -Wmissing-format-attribute -fno-exceptions -fno-check-new -fno-common")
304
   endif ()
305 306

   # if no special buildtype is selected, add -O2 as default optimization
307 308 309
   if (NOT CMAKE_BUILD_TYPE AND _KDE3_USE_FLAGS)
      set ( CMAKE_C_FLAGS     "${CMAKE_C_FLAGS} -O2")
      set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")
310
   endif ()
311

312 313 314
#set(CMAKE_SHARED_LINKER_FLAGS "-avoid-version -module -Wl,--no-undefined -Wl,--allow-shlib-undefined")
#set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--fatal-warnings -avoid-version -Wl,--no-undefined -lc")
#set(CMAKE_MODULE_LINKER_FLAGS "-Wl,--fatal-warnings -avoid-version -Wl,--no-undefined -lc")
315
endif()
316 317 318


# KDE3Macros.cmake contains all the KDE specific macros
319
include(${CMAKE_CURRENT_LIST_DIR}/KDE3Macros.cmake)
320

321

322 323 324
macro (KDE3_PRINT_RESULTS)
   if(KDE3_INCLUDE_DIR)
      message(STATUS "Found KDE3 include dir: ${KDE3_INCLUDE_DIR}")
325
   else()
326
      message(STATUS "Didn't find KDE3 headers")
327
   endif()
328

329 330
   if(KDE3_LIB_DIR)
      message(STATUS "Found KDE3 library dir: ${KDE3_LIB_DIR}")
331
   else()
332
      message(STATUS "Didn't find KDE3 core library")
333
   endif()
334

335 336
   if(KDE3_DCOPIDL_EXECUTABLE)
      message(STATUS "Found KDE3 dcopidl preprocessor: ${KDE3_DCOPIDL_EXECUTABLE}")
337
   else()
338
      message(STATUS "Didn't find the KDE3 dcopidl preprocessor")
339
   endif()
340

341 342
   if(KDE3_DCOPIDL2CPP_EXECUTABLE)
      message(STATUS "Found KDE3 dcopidl2cpp preprocessor: ${KDE3_DCOPIDL2CPP_EXECUTABLE}")
343
   else()
344
      message(STATUS "Didn't find the KDE3 dcopidl2cpp preprocessor")
345
   endif()
346

347 348
   if(KDE3_KCFGC_EXECUTABLE)
      message(STATUS "Found KDE3 kconfig_compiler preprocessor: ${KDE3_KCFGC_EXECUTABLE}")
349
   else()
350
      message(STATUS "Didn't find the KDE3 kconfig_compiler preprocessor")
351
   endif()
352

353
endmacro ()
354 355


356
if (KDE3_FIND_REQUIRED AND NOT KDE3_FOUND)
357 358
   #bail out if something wasn't found
   KDE3_PRINT_RESULTS()
359
   message(FATAL_ERROR "Could NOT find everything required for compiling KDE 3 programs")
360

361
endif ()
362 363


364
if (NOT KDE3_FIND_QUIETLY)
365
   KDE3_PRINT_RESULTS()
366
endif ()
367 368

#add the found Qt and KDE include directories to the current include path
369
set(KDE3_INCLUDE_DIRS ${QT_INCLUDE_DIR} ${KDE3_INCLUDE_DIR})
370