Imported Upstream version 2.8.10.2
[platform/upstream/cmake.git] / Modules / KDE3Macros.cmake
1 #
2
3 #=============================================================================
4 # Copyright 2006-2009 Kitware, Inc.
5 # Copyright 2006 Alexander Neundorf <neundorf@kde.org>
6 #
7 # Distributed under the OSI-approved BSD License (the "License");
8 # see accompanying file Copyright.txt for details.
9 #
10 # This software is distributed WITHOUT ANY WARRANTY; without even the
11 # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12 # See the License for more information.
13 #=============================================================================
14 # (To distribute this file outside of CMake, substitute the full
15 #  License text for the above reference.)
16
17 # See FindKDE3.cmake for documentation.
18 #
19 # this file contains the following macros:
20 # KDE3_ADD_DCOP_SKELS
21 # KDE3_ADD_DCOP_STUBS
22 # KDE3_ADD_MOC_FILES
23 # KDE3_ADD_UI_FILES
24 # KDE3_ADD_KCFG_FILES
25 # KDE3_AUTOMOC
26 # KDE3_INSTALL_LIBTOOL_FILE
27 # KDE3_CREATE_FINAL_FILE
28 # KDE3_ADD_KPART
29 # KDE3_ADD_KDEINIT_EXECUTABLE
30 # KDE3_ADD_EXECUTABLE
31
32
33 #neundorf@kde.org
34
35 include(AddFileDependencies)
36
37 #create the kidl and skeletion file for dcop stuff
38 #usage: KDE_ADD_COP_SKELS(foo_SRCS ${dcop_headers})
39 macro(KDE3_ADD_DCOP_SKELS _sources)
40    foreach (_current_FILE ${ARGN})
41
42       get_filename_component(_tmp_FILE ${_current_FILE} ABSOLUTE)
43       get_filename_component(_basename ${_tmp_FILE} NAME_WE)
44
45       set(_skel ${CMAKE_CURRENT_BINARY_DIR}/${_basename}_skel.cpp)
46       set(_kidl ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.kidl)
47
48       if (NOT HAVE_${_basename}_KIDL_RULE)
49          set(HAVE_${_basename}_KIDL_RULE ON)
50
51           add_custom_command(OUTPUT ${_kidl}
52           COMMAND ${KDE3_DCOPIDL_EXECUTABLE}
53           ARGS ${_tmp_FILE} > ${_kidl}
54           DEPENDS ${_tmp_FILE}
55          )
56
57        endif ()
58
59       if (NOT HAVE_${_basename}_SKEL_RULE)
60         set(HAVE_${_basename}_SKEL_RULE ON)
61
62        add_custom_command(OUTPUT ${_skel}
63           COMMAND ${KDE3_DCOPIDL2CPP_EXECUTABLE}
64           ARGS --c++-suffix cpp --no-signals --no-stub ${_kidl}
65           DEPENDS ${_kidl}
66           )
67
68       endif ()
69
70       set(${_sources} ${${_sources}} ${_skel})
71
72    endforeach ()
73
74 endmacro()
75
76
77 macro(KDE3_ADD_DCOP_STUBS _sources)
78    foreach (_current_FILE ${ARGN})
79
80       get_filename_component(_tmp_FILE ${_current_FILE} ABSOLUTE)
81
82       get_filename_component(_basename ${_tmp_FILE} NAME_WE)
83
84       set(_stub_CPP ${CMAKE_CURRENT_BINARY_DIR}/${_basename}_stub.cpp)
85       set(_kidl ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.kidl)
86
87       if (NOT HAVE_${_basename}_KIDL_RULE)
88         set(HAVE_${_basename}_KIDL_RULE ON)
89
90
91         add_custom_command(OUTPUT ${_kidl}
92            COMMAND ${KDE3_DCOPIDL_EXECUTABLE}
93            ARGS ${_tmp_FILE} > ${_kidl}
94            DEPENDS ${_tmp_FILE}
95            )
96
97       endif ()
98
99
100       if (NOT HAVE_${_basename}_STUB_RULE)
101         set(HAVE_${_basename}_STUB_RULE ON)
102
103         add_custom_command(OUTPUT ${_stub_CPP}
104            COMMAND ${KDE3_DCOPIDL2CPP_EXECUTABLE}
105            ARGS --c++-suffix cpp --no-signals --no-skel ${_kidl}
106            DEPENDS ${_kidl}
107          )
108
109       endif ()
110
111       set(${_sources} ${${_sources}} ${_stub_CPP})
112
113    endforeach ()
114
115 endmacro()
116
117
118 macro(KDE3_ADD_KCFG_FILES _sources)
119    foreach (_current_FILE ${ARGN})
120
121       get_filename_component(_tmp_FILE ${_current_FILE} ABSOLUTE)
122
123       get_filename_component(_basename ${_tmp_FILE} NAME_WE)
124
125       file(READ ${_tmp_FILE} _contents)
126       string(REGEX REPLACE "^(.*\n)?File=([^\n]+)\n.*$" "\\2"  _kcfg_FILE "${_contents}")
127
128       set(_src_FILE    ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.cpp)
129       set(_header_FILE ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.h)
130
131       add_custom_command(OUTPUT ${_src_FILE}
132          COMMAND ${KDE3_KCFGC_EXECUTABLE}
133          ARGS ${CMAKE_CURRENT_SOURCE_DIR}/${_kcfg_FILE} ${_tmp_FILE}
134          DEPENDS ${_tmp_FILE} ${CMAKE_CURRENT_SOURCE_DIR}/${_kcfg_FILE} )
135
136       set(${_sources} ${${_sources}} ${_src_FILE})
137
138    endforeach ()
139
140 endmacro()
141
142
143 #create the moc files and add them to the list of sources
144 #usage: KDE_ADD_MOC_FILES(foo_SRCS ${moc_headers})
145 macro(KDE3_ADD_MOC_FILES _sources)
146    foreach (_current_FILE ${ARGN})
147
148       get_filename_component(_tmp_FILE ${_current_FILE} ABSOLUTE)
149
150       get_filename_component(_basename ${_tmp_FILE} NAME_WE)
151       set(_moc ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.moc.cpp)
152
153       add_custom_command(OUTPUT ${_moc}
154          COMMAND ${QT_MOC_EXECUTABLE}
155          ARGS ${_tmp_FILE} -o ${_moc}
156          DEPENDS ${_tmp_FILE}
157       )
158
159       set(${_sources} ${${_sources}} ${_moc})
160
161    endforeach ()
162 endmacro()
163
164
165 get_filename_component( KDE3_MODULE_DIR  ${CMAKE_CURRENT_LIST_FILE} PATH)
166
167 #create the implementation files from the ui files and add them to the list of sources
168 #usage: KDE_ADD_UI_FILES(foo_SRCS ${ui_files})
169 macro(KDE3_ADD_UI_FILES _sources )
170    foreach (_current_FILE ${ARGN})
171
172       get_filename_component(_tmp_FILE ${_current_FILE} ABSOLUTE)
173
174       get_filename_component(_basename ${_tmp_FILE} NAME_WE)
175       set(_header ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.h)
176       set(_src ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.cpp)
177       set(_moc ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.moc.cpp)
178
179       add_custom_command(OUTPUT ${_header}
180          COMMAND ${QT_UIC_EXECUTABLE}
181          ARGS  -L ${KDE3_LIB_DIR}/kde3/plugins/designer -nounload -o ${_header} ${CMAKE_CURRENT_SOURCE_DIR}/${_current_FILE}
182          DEPENDS ${_tmp_FILE}
183       )
184
185       add_custom_command(OUTPUT ${_src}
186          COMMAND ${CMAKE_COMMAND}
187          ARGS
188          -DKDE_UIC_PLUGIN_DIR:FILEPATH=${KDE3_LIB_DIR}/kde3/plugins/designer
189          -DKDE_UIC_EXECUTABLE:FILEPATH=${QT_UIC_EXECUTABLE}
190          -DKDE_UIC_FILE:FILEPATH=${_tmp_FILE}
191          -DKDE_UIC_CPP_FILE:FILEPATH=${_src}
192          -DKDE_UIC_H_FILE:FILEPATH=${_header}
193          -P ${KDE3_MODULE_DIR}/kde3uic.cmake
194          DEPENDS ${_header}
195       )
196
197       add_custom_command(OUTPUT ${_moc}
198          COMMAND ${QT_MOC_EXECUTABLE}
199          ARGS ${_header} -o ${_moc}
200          DEPENDS ${_header}
201       )
202
203       set(${_sources} ${${_sources}} ${_src} ${_moc} )
204
205    endforeach ()
206 endmacro()
207
208
209 macro(KDE3_AUTOMOC)
210    set(_matching_FILES )
211    foreach (_current_FILE ${ARGN})
212
213       get_filename_component(_abs_FILE ${_current_FILE} ABSOLUTE)
214
215       # if "SKIP_AUTOMOC" is set to true, we will not handle this file here.
216       # here. this is required to make bouic work correctly:
217       # we need to add generated .cpp files to the sources (to compile them),
218       # but we cannot let automoc handle them, as the .cpp files don't exist yet when
219       # cmake is run for the very first time on them -> however the .cpp files might
220       # exist at a later run. at that time we need to skip them, so that we don't add two
221       # different rules for the same moc file
222       get_source_file_property(_skip ${_abs_FILE} SKIP_AUTOMOC)
223
224       if (EXISTS ${_abs_FILE} AND NOT _skip)
225
226          file(STRINGS ${_abs_FILE} _match REGEX "#include +[^ ]+\\.moc[\">]")
227
228          get_filename_component(_abs_PATH ${_abs_FILE} PATH)
229
230          foreach (_current_MOC_INC IN LISTS _match)
231             string(REGEX MATCH "[^ <\"]+\\.moc" _current_MOC "${_current_MOC_INC}")
232
233             get_filename_component(_basename ${_current_MOC} NAME_WE)
234 #            set(_header ${CMAKE_CURRENT_SOURCE_DIR}/${_basename}.h)
235             set(_header ${_abs_PATH}/${_basename}.h)
236             set(_moc    ${CMAKE_CURRENT_BINARY_DIR}/${_current_MOC})
237
238             add_custom_command(OUTPUT ${_moc}
239                COMMAND ${QT_MOC_EXECUTABLE}
240                ARGS ${_header} -o ${_moc}
241                DEPENDS ${_header}
242             )
243
244             ADD_FILE_DEPENDENCIES(${_abs_FILE} ${_moc})
245
246          endforeach ()
247          unset(_match)
248          unset(_header)
249          unset(_moc)
250       endif ()
251    endforeach ()
252 endmacro()
253
254 # only used internally by KDE3_INSTALL_ICONS
255 macro (_KDE3_ADD_ICON_INSTALL_RULE _install_SCRIPT _install_PATH _group _orig_NAME _install_NAME)
256
257    # if the string doesn't match the pattern, the result is the full string, so all three have the same content
258    if (NOT ${_group} STREQUAL ${_install_NAME} )
259       set(_icon_GROUP "actions")
260
261       if (${_group} STREQUAL "mime")
262          set(_icon_GROUP  "mimetypes")
263       endif ()
264
265       if (${_group} STREQUAL "filesys")
266          set(_icon_GROUP  "filesystems")
267       endif ()
268
269       if (${_group} STREQUAL "device")
270          set(_icon_GROUP  "devices")
271       endif ()
272
273       if (${_group} STREQUAL "app")
274          set(_icon_GROUP  "apps")
275       endif ()
276
277       if (${_group} STREQUAL "action")
278          set(_icon_GROUP  "actions")
279       endif ()
280
281 #      message(STATUS "icon: ${_current_ICON} size: ${_size} group: ${_group} name: ${_name}" )
282    install(FILES ${_orig_NAME} DESTINATION ${_install_PATH}/${_icon_GROUP}/ RENAME ${_install_NAME} )
283    endif ()
284
285 endmacro ()
286
287
288 macro (KDE3_INSTALL_ICONS _theme )
289    set(_defaultpath "${CMAKE_INSTALL_PREFIX}/share/icons")
290    # first the png icons
291    file(GLOB _icons *.png)
292    foreach (_current_ICON ${_icons} )
293       string(REGEX REPLACE "^.*/[a-zA-Z]+([0-9]+)\\-([a-z]+)\\-(.+\\.png)$" "\\1" _size  "${_current_ICON}")
294       string(REGEX REPLACE "^.*/[a-zA-Z]+([0-9]+)\\-([a-z]+)\\-(.+\\.png)$" "\\2" _group "${_current_ICON}")
295       string(REGEX REPLACE "^.*/[a-zA-Z]+([0-9]+)\\-([a-z]+)\\-(.+\\.png)$" "\\3" _name  "${_current_ICON}")
296       _KDE3_ADD_ICON_INSTALL_RULE(${CMAKE_CURRENT_BINARY_DIR}/install_icons.cmake
297          ${_defaultpath}/${_theme}/${_size}x${_size}
298          ${_group} ${_current_ICON} ${_name})
299    endforeach ()
300
301    # and now the svg icons
302    file(GLOB _icons *.svgz)
303    foreach (_current_ICON ${_icons} )
304       string(REGEX REPLACE "^.*/crsc\\-([a-z]+)\\-(.+\\.svgz)$" "\\1" _group "${_current_ICON}")
305       string(REGEX REPLACE "^.*/crsc\\-([a-z]+)\\-(.+\\.svgz)$" "\\2" _name "${_current_ICON}")
306       _KDE3_ADD_ICON_INSTALL_RULE(${CMAKE_CURRENT_BINARY_DIR}/install_icons.cmake
307                                  ${_defaultpath}/${_theme}/scalable
308                                  ${_group} ${_current_ICON} ${_name})
309    endforeach ()
310
311 endmacro ()
312
313 macro(KDE3_INSTALL_LIBTOOL_FILE _target)
314    get_target_property(_target_location ${_target} LOCATION)
315
316    get_filename_component(_laname ${_target_location} NAME_WE)
317    get_filename_component(_soname ${_target_location} NAME)
318    set(_laname ${CMAKE_CURRENT_BINARY_DIR}/${_laname}.la)
319
320    file(WRITE ${_laname} "# ${_laname} - a libtool library file, generated by cmake \n")
321    file(APPEND ${_laname} "# The name that we can dlopen(3).\n")
322    file(APPEND ${_laname} "dlname='${_soname}'\n")
323    file(APPEND ${_laname} "# Names of this library\n")
324    if(CYGWIN)
325      file(APPEND ${_laname} "library_names='${_soname}'\n")
326    else()
327      file(APPEND ${_laname} "library_names='${_soname} ${_soname} ${_soname}'\n")
328    endif()
329    file(APPEND ${_laname} "# The name of the static archive\n")
330    file(APPEND ${_laname} "old_library=''\n")
331    file(APPEND ${_laname} "# Libraries that this one depends upon.\n")
332    file(APPEND ${_laname} "dependency_libs=''\n")
333 #   file(APPEND ${_laname} "dependency_libs='${${_target}_LIB_DEPENDS}'\n")
334    file(APPEND ${_laname} "# Version information.\ncurrent=0\nage=0\nrevision=0\n")
335    file(APPEND ${_laname} "# Is this an already installed library?\ninstalled=yes\n")
336    file(APPEND ${_laname} "# Should we warn about portability when linking against -modules?\nshouldnotlink=yes\n")
337    file(APPEND ${_laname} "# Files to dlopen/dlpreopen\ndlopen=''\ndlpreopen=''\n")
338    file(APPEND ${_laname} "# Directory that this library needs to be installed in:\n")
339    file(APPEND ${_laname} "libdir='${CMAKE_INSTALL_PREFIX}/lib/kde3'\n")
340
341    install_files(${KDE3_LIBTOOL_DIR} FILES ${_laname})
342 endmacro()
343
344
345 macro(KDE3_CREATE_FINAL_FILE _filename)
346    file(WRITE ${_filename} "//autogenerated file\n")
347    foreach (_current_FILE ${ARGN})
348       file(APPEND ${_filename} "#include \"${_current_FILE}\"\n")
349    endforeach ()
350
351 endmacro()
352
353
354 # option(KDE3_ENABLE_FINAL "Enable final all-in-one compilation")
355 option(KDE3_BUILD_TESTS  "Build the tests")
356
357
358 macro(KDE3_ADD_KPART _target_NAME _with_PREFIX)
359 #is the first argument is "WITH_PREFIX" then keep the standard "lib" prefix, otherwise SET the prefix empty
360    if (${_with_PREFIX} STREQUAL "WITH_PREFIX")
361       set(_first_SRC)
362    else ()
363       set(_first_SRC ${_with_PREFIX})
364    endif ()
365
366 #    if (KDE3_ENABLE_FINAL)
367 #       KDE3_CREATE_FINAL_FILE(${_target_NAME}_final.cpp ${_first_SRC} ${ARGN})
368 #       add_library(${_target_NAME} MODULE  ${_target_NAME}_final.cpp)
369 #    else ()
370    add_library(${_target_NAME} MODULE ${_first_SRC} ${ARGN})
371 #    endif ()
372
373    if(_first_SRC)
374       set_target_properties(${_target_NAME} PROPERTIES PREFIX "")
375    endif()
376
377    KDE3_INSTALL_LIBTOOL_FILE(${_target_NAME})
378
379 endmacro()
380
381
382 macro(KDE3_ADD_KDEINIT_EXECUTABLE _target_NAME )
383
384 #    if (KDE3_ENABLE_FINAL)
385 #       KDE3_CREATE_FINAL_FILE(${_target_NAME}_final.cpp ${ARGN})
386 #       add_library(kdeinit_${_target_NAME} SHARED  ${_target_NAME}_final.cpp)
387 #    else ()
388    add_library(kdeinit_${_target_NAME} SHARED ${ARGN} )
389 #    endif ()
390
391    configure_file(${KDE3_MODULE_DIR}/kde3init_dummy.cpp.in ${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_dummy.cpp)
392
393    add_executable( ${_target_NAME} ${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_dummy.cpp )
394    target_link_libraries( ${_target_NAME} kdeinit_${_target_NAME} )
395
396 endmacro()
397
398
399 macro(KDE3_ADD_EXECUTABLE _target_NAME )
400
401 #    if (KDE3_ENABLE_FINAL)
402 #       KDE3_CREATE_FINAL_FILE(${_target_NAME}_final.cpp ${ARGN})
403 #       add_executable(${_target_NAME} ${_target_NAME}_final.cpp)
404 #    else ()
405    add_executable(${_target_NAME} ${ARGN} )
406 #    endif ()
407
408 endmacro()
409
410