From d46f0af3b68dba8e3bb5461c5b5e37862309875d Mon Sep 17 00:00:00 2001 From: Alexander Neundorf Date: Thu, 11 May 2006 16:55:53 +0000 Subject: -enhanced syntax for KDE4_ADD_EXECUTABLE and KDE4_ADD_KDEINIT_EXECUTABLE: KDE4_ADD_EXECUTABLE(name [NOGUI] [RUN_UNINSTALLED] srcs...) KDE4_ADD_KDEINIT_EXECUTABLE(name [NOGUI] [RUN_UNINSTALLED] srcs...) -> NOGUI and RUN_UNINSTALLED can now be used independently together. This also means that RUN_UNINSTALLED no longer automatically means NOGUI. -build libs and plugins with empty RPATH, so they don't have to be relinked during make install Alex CCMAIL: kde-buildsystem@kde.org svn path=/trunk/KDE/kdelibs/; revision=539757 --- modules/FindKDE4Internal.cmake | 30 +++++------ modules/FindQt4.cmake | 2 + modules/KDE4Macros.cmake | 118 +++++++++++++++++++++++++++++++---------- 3 files changed, 106 insertions(+), 44 deletions(-) diff --git a/modules/FindKDE4Internal.cmake b/modules/FindKDE4Internal.cmake index 64964636..c1657288 100644 --- a/modules/FindKDE4Internal.cmake +++ b/modules/FindKDE4Internal.cmake @@ -151,12 +151,17 @@ # If WITH_PREFIX is given, the resulting plugin will have the prefix "lib", otherwise it won't. # It creates and installs an appropriate libtool la-file. # -# KDE4_ADD_KDEINIT_EXECUTABLE (name file1 ... fileN) +# KDE4_ADD_KDEINIT_EXECUTABLE (name [NOGUI] [RUN_UNINSTALLED] file1 ... fileN) # Create a KDE application in the form of a module loadable via kdeinit. # A library named kdeinit_ will be created and a small executable which links to it. -# It supports KDE3_ENABLE_FINAL +# It supports KDE4_ENABLE_FINAL +# If the executable has to be run from the buildtree (e.g. unit tests and code generators +# used later on when compiling), set the option RUN_UNINSTALLED. +# If the executable doesn't have a GUI, use the option NOGUI. By default on OS X +# application bundles are created, with the NOGUI option no bundles but simple executables +# are created. Currently it doesn't have any effect on other platforms. # -# KDE4_ADD_EXECUTABLE (name [ NOGUI | RUN_UNINSTALLED] file1 ... fileN) +# KDE4_ADD_EXECUTABLE (name [NOGUI] [RUN_UNINSTALLED] file1 ... fileN) # Equivalent to ADD_EXECUTABLE(), but additionally adds support for KDE4_ENABLE_FINAL. # If you don't need support for KDE4_ENABLE_FINAL, you can just use the # normal ADD_EXECUTABLE(). @@ -353,8 +358,8 @@ else(EXISTS ${CMAKE_SOURCE_DIR}/kdecore/kglobal.h) set(KDE4_KSPELL2_LIBS ${kspell2_LIB_DEPENDS} ${KDE4_KSPELL2_LIBRARY} ) if (UNIX) - find_library(KDE4_KDESU_LIBRARY NAMES kdesu PATHS ${KDE4_LIB_INSTALL_DIR} NO_DEFAULT_PATH ) - set(KDE4_KDESU_LIBS ${kdesu_LIB_DEPENDS} ${KDE4_KDESU_LIBRARY} ) + find_library(KDE4_KDESU_LIBRARY NAMES kdesu PATHS ${KDE4_LIB_INSTALL_DIR} NO_DEFAULT_PATH ) + set(KDE4_KDESU_LIBS ${kdesu_LIB_DEPENDS} ${KDE4_KDESU_LIBRARY} ) endif (UNIX) find_library(KDE4_KDNSSD_LIBRARY NAMES kdnssd PATHS ${KDE4_LIB_INSTALL_DIR} NO_DEFAULT_PATH ) @@ -386,8 +391,7 @@ else(EXISTS ${CMAKE_SOURCE_DIR}/kdecore/kglobal.h) $ENV{KDEDIR}/bin /opt/kde/bin /opt/kde4/bin - NO_SYSTEM_PATH - NO_CMAKE_SYSTEM_PATH + NO_DEFAULT_PATH ) if (NOT KDE4_DCOPIDL_EXECUTABLE) @@ -407,8 +411,7 @@ else(EXISTS ${CMAKE_SOURCE_DIR}/kdecore/kglobal.h) $ENV{KDEDIR}/bin /opt/kde/bin /opt/kde4/bin - NO_SYSTEM_PATH - NO_CMAKE_SYSTEM_PATH + NO_DEFAULT_PATH ) if (NOT KDE4_DCOPIDL2CPP_EXECUTABLE) @@ -420,8 +423,7 @@ else(EXISTS ${CMAKE_SOURCE_DIR}/kdecore/kglobal.h) $ENV{KDEDIR}/bin /opt/kde/bin /opt/kde4/bin - NO_SYSTEM_PATH - NO_CMAKE_SYSTEM_PATH + NO_DEFAULT_PATH ) if (NOT KDE4_KCFGC_EXECUTABLE) @@ -433,8 +435,7 @@ else(EXISTS ${CMAKE_SOURCE_DIR}/kdecore/kglobal.h) $ENV{KDEDIR}/bin /opt/kde/bin /opt/kde4/bin - NO_SYSTEM_PATH - NO_CMAKE_SYSTEM_PATH + NO_DEFAULT_PATH ) if (NOT KDE4_MEINPROC_EXECUTABLE) @@ -446,8 +447,7 @@ else(EXISTS ${CMAKE_SOURCE_DIR}/kdecore/kglobal.h) $ENV{KDEDIR}/bin /opt/kde/bin /opt/kde4/bin - NO_SYSTEM_PATH - NO_CMAKE_SYSTEM_PATH + NO_DEFAULT_PATH ) if (NOT KDE4_MAKEKDEWIDGETS_EXECUTABLE) diff --git a/modules/FindQt4.cmake b/modules/FindQt4.cmake index a3d282ec..c559de44 100644 --- a/modules/FindQt4.cmake +++ b/modules/FindQt4.cmake @@ -716,6 +716,8 @@ IF (QT4_QMAKE_FOUND) COMMAND ${QT_MOC_EXECUTABLE} ARGS ${moc_includes} -o ${outfile} ${infile} DEPENDS ${infile}) + + MACRO_ADD_FILE_DEPENDENCIES(${infile} ${outfile}) ENDMACRO (QT4_GENERATE_MOC) diff --git a/modules/KDE4Macros.cmake b/modules/KDE4Macros.cmake index 4db3809a..7da50edc 100644 --- a/modules/KDE4Macros.cmake +++ b/modules/KDE4Macros.cmake @@ -442,6 +442,10 @@ MACRO (KDE4_ADD_PLUGIN _target_NAME _with_PREFIX) SET_TARGET_PROPERTIES(${_target_NAME} PROPERTIES PREFIX "") endif (_first_SRC) + if (NOT CMAKE_SKIP_RPATH) + set_target_properties(${_target_NAME} PROPERTIES SKIP_BUILD_RPATH TRUE BUILD_WITH_INSTALL_RPATH TRUE INSTALL_RPATH "") + endif (NOT CMAKE_SKIP_RPATH) + # if (UNIX) # I guess under windows the libtool file are not required # KDE4_INSTALL_LIBTOOL_FILE(${_target_NAME}) @@ -457,9 +461,62 @@ MACRO (KDE4_ADD_PLUGIN _target_NAME _with_PREFIX) ENDMACRO (KDE4_ADD_PLUGIN _target_NAME _with_PREFIX) -MACRO (KDE4_ADD_KDEINIT_EXECUTABLE _target_NAME ) +# this macro checks is intended to check whether a list of source +# files has the "NOGUI" or "RUN_UNINSTALLED" keywords at the beginning +# in _output_LIST the list of source files is returned with the "NOGUI" +# and "RUN_UNINSTALLED" keywords removed +# if "NOGUI" is in the list of files, the _nogui argument is set to +# "NOGUI" (which evaluates to TRUE in cmake), otherwise it is set empty +# (which evaluates to FALSE in cmake) +# if "RUN_UNINSTALLED" is in the list of files, the _uninst argument is set to +# "RUN_UNINSTALLED" (which evaluates to TRUE in cmake), otherwise it is set empty +# (which evaluates to FALSE in cmake) +MACRO(KDE4_CHECK_EXECUTABLE_PARAMS _output_LIST _nogui _uninst) + set(${_nogui}) + set(${_uninst}) + set(${_output_LIST} ${ARGN}) + list(LENGTH ${_output_LIST} count) + + list(GET ${_output_LIST} 0 first_PARAM) + + set(second_PARAM "NOTFOUND") + if (${count} GREATER 1) + list(GET ${_output_LIST} 1 second_PARAM) + endif (${count} GREATER 1) + + set(remove "NOTFOUND") + + if (${first_PARAM} STREQUAL "NOGUI") + set(${_nogui} "NOGUI") + set(remove 0) + endif (${first_PARAM} STREQUAL "NOGUI") + + if (${second_PARAM} STREQUAL "NOGUI") + set(${_nogui} "NOGUI") + set(remove 0;1) + endif (${second_PARAM} STREQUAL "NOGUI") + + if (${first_PARAM} STREQUAL "RUN_UNINSTALLED") + set(${_uninst} "RUN_UNINSTALLED") + set(remove 0) + endif (${first_PARAM} STREQUAL "RUN_UNINSTALLED") + + if (${second_PARAM} STREQUAL "RUN_UNINSTALLED") + set(${_uninst} "RUN_UNINSTALLED") + set(remove 0;1) + endif (${second_PARAM} STREQUAL "RUN_UNINSTALLED") + + if (NOT "${remove}" STREQUAL "NOTFOUND") + list(REMOVE_ITEM ${_output_LIST} ${remove}) + endif (NOT "${remove}" STREQUAL "NOTFOUND") + +ENDMACRO(KDE4_CHECK_EXECUTABLE_PARAMS) + - CONFIGURE_FILE(${KDE4_MODULE_DIR}/kde4init_dummy.cpp.in ${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_dummy.cpp) +macro (KDE4_ADD_KDEINIT_EXECUTABLE _target_NAME ) + + kde4_check_executable_params(_SRCS _nogui _uninst ${ARGN}) + configure_file(${KDE4_MODULE_DIR}/kde4init_dummy.cpp.in ${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_dummy.cpp) #MACRO_ADDITIONAL_CLEAN_FILES(${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_dummy.cpp) # if (WIN32) @@ -468,24 +525,26 @@ MACRO (KDE4_ADD_KDEINIT_EXECUTABLE _target_NAME ) # else (WIN32) # under UNIX, create a shared library and a small executable, which links to this library if (KDE4_ENABLE_FINAL) - KDE4_CREATE_FINAL_FILES(${_target_NAME}_final_cpp.cpp ${_target_NAME}_final_c.c ${ARGN}) - ADD_LIBRARY(kdeinit_${_target_NAME} SHARED ${_target_NAME}_final_cpp.cpp ${_target_NAME}_final_c.c) + kde4_create_final_files(${_target_NAME}_final_cpp.cpp ${_target_NAME}_final_c.c ${_SRCS}) + add_library(kdeinit_${_target_NAME} SHARED ${_target_NAME}_final_cpp.cpp ${_target_NAME}_final_c.c) + if (NOT CMAKE_SKIP_RPATH) + set_target_properties(kdeinit_${_target_NAME} PROPERTIES SKIP_BUILD_RPATH TRUE BUILD_WITH_INSTALL_RPATH TRUE INSTALL_RPATH "") + endif (NOT CMAKE_SKIP_RPATH) + else (KDE4_ENABLE_FINAL) - ADD_LIBRARY(kdeinit_${_target_NAME} SHARED ${ARGN} ) -# message(STATUS "klm: kdeinit_${_target_NAME}") + add_library(kdeinit_${_target_NAME} SHARED ${_SRCS} ) endif (KDE4_ENABLE_FINAL) - - ADD_EXECUTABLE(${_target_NAME} ${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_dummy.cpp) - KDE4_HANDLE_RPATH(${_target_NAME} GUI) - TARGET_LINK_LIBRARIES(${_target_NAME} kdeinit_${_target_NAME}) + kde4_add_executable(${_target_NAME} "${_nogui}" "${_uninst}" ${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_dummy.cpp) + target_link_libraries(${_target_NAME} kdeinit_${_target_NAME}) # endif (WIN32) -ENDMACRO (KDE4_ADD_KDEINIT_EXECUTABLE _target_NAME) +endmacro (KDE4_ADD_KDEINIT_EXECUTABLE) -macro (KDE4_ADD_EXECUTABLE _target_NAME _first_ARG) +macro (KDE4_ADD_EXECUTABLE _target_NAME) + + kde4_check_executable_params( _SRCS _nogui _uninst ${ARGN}) - set(_first_SRC ${_first_ARG} ) set(_add_executable_param) set(_type "GUI") @@ -498,31 +557,28 @@ macro (KDE4_ADD_EXECUTABLE _target_NAME _first_ARG) # set(_add_executable_param WIN32) # endif (WIN32) - - if (${_first_ARG} STREQUAL "NOGUI") + if (_nogui) set(_type "NOGUI") - set(_first_SRC) set(_add_executable_param) - endif (${_first_ARG} STREQUAL "NOGUI") - if (${_first_ARG} STREQUAL "RUN_UNINSTALLED") + endif (_nogui) + + if (_uninst) set(_type "RUN_UNINSTALLED") - set(_first_SRC) - set(_add_executable_param) - endif (${_first_ARG} STREQUAL "RUN_UNINSTALLED") + endif (_uninst) if (KDE4_ENABLE_FINAL) - kde4_create_final_files(${_target_NAME}_final_cpp.cpp ${_target_NAME}_final_c.c ${_first_SRC} ${ARGN}) + kde4_create_final_files(${_target_NAME}_final_cpp.cpp ${_target_NAME}_final_c.c ${_SRCS}) add_executable(${_target_NAME} ${_add_executable_param} ${_target_NAME}_final_cpp.cpp ${_target_NAME}_final_c.c) else (KDE4_ENABLE_FINAL) - add_executable(${_target_NAME} ${_add_executable_param} ${_first_SRC} ${ARGN} ) + add_executable(${_target_NAME} ${_add_executable_param} ${_SRCS} ) endif (KDE4_ENABLE_FINAL) kde4_handle_rpath(${_target_NAME} ${_type}) -endmacro (KDE4_ADD_EXECUTABLE _target_NAME) +endmacro (KDE4_ADD_EXECUTABLE) -macro (KDE4_ADD_LIBRARY _target_NAME _lib_TYPE) +MACRO (KDE4_ADD_LIBRARY _target_NAME _lib_TYPE) #is the first argument is "WITH_PREFIX" then keep the standard "lib" prefix, otherwise set the prefix empty set(_first_SRC ${_lib_TYPE}) @@ -542,12 +598,16 @@ macro (KDE4_ADD_LIBRARY _target_NAME _lib_TYPE) endif (${_lib_TYPE} STREQUAL "MODULE") if (KDE4_ENABLE_FINAL) - kde4_create_final_files(${_target_NAME}_final_cpp.cpp ${_target_NAME}_final_c.c ${_first_SRC} ${ARGN}) - add_library(${_target_NAME} ${_add_lib_param} ${_target_NAME}_final_cpp.cpp ${_target_NAME}_final_c.c) + KDE4_CREATE_FINAL_FILES(${_target_NAME}_final_cpp.cpp ${_target_NAME}_final_c.c ${_first_SRC} ${ARGN}) + ADD_LIBRARY(${_target_NAME} ${_add_lib_param} ${_target_NAME}_final_cpp.cpp ${_target_NAME}_final_c.c) else (KDE4_ENABLE_FINAL) - add_library(${_target_NAME} ${_add_lib_param} ${_first_SRC} ${ARGN}) + ADD_LIBRARY(${_target_NAME} ${_add_lib_param} ${_first_SRC} ${ARGN}) endif (KDE4_ENABLE_FINAL) + if (NOT CMAKE_SKIP_RPATH) + set_target_properties(${_target_NAME} PROPERTIES SKIP_BUILD_RPATH TRUE BUILD_WITH_INSTALL_RPATH TRUE INSTALL_RPATH "") + endif (NOT CMAKE_SKIP_RPATH) + if (WIN32) # for shared libraries a -DMAKE_target_LIB is required string(TOUPPER ${_target_NAME} _symbol) @@ -555,7 +615,7 @@ macro (KDE4_ADD_LIBRARY _target_NAME _lib_TYPE) set_target_properties(${_target_NAME} PROPERTIES DEFINE_SYMBOL ${_symbol}) endif (WIN32) -endmacro (KDE4_ADD_LIBRARY _target_NAME _lib_TYPE) +ENDMACRO (KDE4_ADD_LIBRARY _target_NAME _lib_TYPE) MACRO (KDE4_ADD_WIDGET_FILES _sources) -- cgit v1.2.1