From 12593fe0ab3dc6587ea965a8c287735200f9b084 Mon Sep 17 00:00:00 2001 From: Laurent Montel Date: Mon, 20 Oct 2008 07:15:30 +0000 Subject: Move here (used by kdeedu/kdebase) svn path=/trunk/KDE/kdelibs/; revision=873785 --- modules/SIPMacros.cmake | 117 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 modules/SIPMacros.cmake (limited to 'modules/SIPMacros.cmake') diff --git a/modules/SIPMacros.cmake b/modules/SIPMacros.cmake new file mode 100644 index 00000000..5cbb168d --- /dev/null +++ b/modules/SIPMacros.cmake @@ -0,0 +1,117 @@ +# Macros for SIP +# ~~~~~~~~~~~~~~ +# Copyright (c) 2007, Simon Edwards +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. +# +# SIP website: http://www.riverbankcomputing.co.uk/sip/index.php +# +# This file defines the following macros: +# +# ADD_SIP_PYTHON_MODULE (MODULE_NAME MODULE_SIP [library1, libaray2, ...]) +# Specifies a SIP file to be built into a Python module and installed. +# MODULE_NAME is the name of Python module including any path name. (e.g. +# os.sys, Foo.bar etc). MODULE_SIP the path and filename of the .sip file +# to process and compile. libraryN are libraries that the Python module, +# which is typically a shared library, should be linked to. The built +# module will also be install into Python's site-packages directory. +# +# The behaviour of the ADD_SIP_PYTHON_MODULE macro can be controlled by a +# number of variables: +# +# SIP_INCLUDES - List of directories which SIP will scan through when looking +# for included .sip files. (Corresponds to the -I option for SIP.) +# +# SIP_TAGS - List of tags to define when running SIP. (Corresponds to the -t +# option for SIP.) +# +# SIP_CONCAT_PARTS - An integer which defines the number of parts the C++ code +# of each module should be split into. Defaults to 8. (Corresponds to the +# -j option for SIP.) +# +# SIP_DISABLE_FEATURES - List of feature names which should be disabled +# running SIP. (Corresponds to the -x option for SIP.) +# +# SIP_EXTRA_OPTIONS - Extra command line options which should be passed on to +# SIP. + +SET(SIP_INCLUDES) +SET(SIP_TAGS) +SET(SIP_CONCAT_PARTS 8) +SET(SIP_DISABLE_FEATURES) +SET(SIP_EXTRA_OPTIONS) + +MACRO(ADD_SIP_PYTHON_MODULE MODULE_NAME MODULE_SIP) + + FIND_FILE(_print_status_cmake print_status.cmake PATHS ${CMAKE_MODULE_PATH}) + + # FIXME this removes -fvisibility=hidden from the compiler flags and has global affect. + STRING(REPLACE "-fvisibility=hidden" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) + SET(EXTRA_LINK_LIBRARIES ${ARGN}) + + STRING(REPLACE "." "/" _x ${MODULE_NAME}) + GET_FILENAME_COMPONENT(_parent_module_path ${_x} PATH) + GET_FILENAME_COMPONENT(_child_module_name ${_x} NAME) + + GET_FILENAME_COMPONENT(_module_path ${MODULE_SIP} PATH) + GET_FILENAME_COMPONENT(_abs_module_sip ${MODULE_SIP} ABSOLUTE) + + # We give this target a long logical target name. + # (This is to avoid having the library name clash with any already + # install library names. If that happens then cmake dependancy + # tracking get confused.) + STRING(REPLACE "." "_" _logical_name ${MODULE_NAME}) + SET(_logical_name "python_module_${_logical_name}") + + FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_module_path}) # Output goes in this dir. + + SET(_sip_includes) + FOREACH (_inc ${SIP_INCLUDES}) + GET_FILENAME_COMPONENT(_abs_inc ${_inc} ABSOLUTE) + LIST(APPEND _sip_includes -I ${_abs_inc}) + ENDFOREACH (_inc ) + + SET(_sip_tags) + FOREACH (_tag ${SIP_TAGS}) + LIST(APPEND _sip_tags -t ${_tag}) + ENDFOREACH (_tag) + + SET(_sip_x) + FOREACH (_x ${SIP_DISABLE_FEATURES}) + LIST(APPEND _sip_x -x ${_x}) + ENDFOREACH (_x ${SIP_DISABLE_FEATURES}) + + SET(_message "-DMESSAGE=Generating CPP code for module ${MODULE_NAME}") + SET(_sip_output_files) + FOREACH(CONCAT_NUM RANGE 0 ${SIP_CONCAT_PARTS} ) + IF( ${CONCAT_NUM} LESS ${SIP_CONCAT_PARTS} ) + SET(_sip_output_files ${_sip_output_files} ${CMAKE_CURRENT_BINARY_DIR}/${_module_path}/sip${_child_module_name}part${CONCAT_NUM}.cpp ) + ENDIF( ${CONCAT_NUM} LESS ${SIP_CONCAT_PARTS} ) + ENDFOREACH(CONCAT_NUM RANGE 0 ${SIP_CONCAT_PARTS} ) + + IF(NOT WIN32) + SET(TOUCH_COMMAND touch) + ELSE(NOT WIN32) + SET(TOUCH_COMMAND echo) + # instead of a touch command, give out the name and append to the files + # this is basically what the touch command does. + FOREACH(filename ${_sip_output_files}) + FILE(APPEND filename "") + ENDFOREACH(filename ${_sip_output_files}) + ENDIF(NOT WIN32) + ADD_CUSTOM_COMMAND( + OUTPUT ${_sip_output_files} + COMMAND ${CMAKE_COMMAND} ${_message} -P ${_print_status_cmake} + COMMAND ${TOUCH_COMMAND} ${_sip_output_files} + COMMAND ${SIP_EXECUTABLE} ${_sip_tags} ${_sip_x} ${SIP_EXTRA_OPTIONS} -j ${SIP_CONCAT_PARTS} -c ${CMAKE_CURRENT_BINARY_DIR}/${_module_path} ${_sip_includes} ${_abs_module_sip} + DEPENDS ${_abs_module_sip} + ) + + ADD_LIBRARY(${_logical_name} SHARED ${_sip_output_files} ) + TARGET_LINK_LIBRARIES(${_logical_name} ${PYTHON_LIBRARY}) + TARGET_LINK_LIBRARIES(${_logical_name} ${EXTRA_LINK_LIBRARIES}) + SET_TARGET_PROPERTIES(${_logical_name} PROPERTIES PREFIX "" OUTPUT_NAME ${_child_module_name}) + + INSTALL(TARGETS ${_logical_name} DESTINATION "${PYTHON_SITE_PACKAGES_DIR}/${_parent_module_path}") + +ENDMACRO(ADD_SIP_PYTHON_MODULE) -- cgit v1.2.1 From 3ccbe08963ff10657585b2a7ba79825b245c424a Mon Sep 17 00:00:00 2001 From: Laurent Montel Date: Tue, 21 Oct 2008 06:46:12 +0000 Subject: Bye bye print_status.cmake svn path=/trunk/KDE/kdelibs/; revision=874282 --- modules/SIPMacros.cmake | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'modules/SIPMacros.cmake') diff --git a/modules/SIPMacros.cmake b/modules/SIPMacros.cmake index 5cbb168d..acb6204b 100644 --- a/modules/SIPMacros.cmake +++ b/modules/SIPMacros.cmake @@ -43,7 +43,6 @@ SET(SIP_EXTRA_OPTIONS) MACRO(ADD_SIP_PYTHON_MODULE MODULE_NAME MODULE_SIP) - FIND_FILE(_print_status_cmake print_status.cmake PATHS ${CMAKE_MODULE_PATH}) # FIXME this removes -fvisibility=hidden from the compiler flags and has global affect. STRING(REPLACE "-fvisibility=hidden" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) @@ -101,7 +100,7 @@ MACRO(ADD_SIP_PYTHON_MODULE MODULE_NAME MODULE_SIP) ENDIF(NOT WIN32) ADD_CUSTOM_COMMAND( OUTPUT ${_sip_output_files} - COMMAND ${CMAKE_COMMAND} ${_message} -P ${_print_status_cmake} + COMMAND ${CMAKE_COMMAND} -E echo ${message} COMMAND ${TOUCH_COMMAND} ${_sip_output_files} COMMAND ${SIP_EXECUTABLE} ${_sip_tags} ${_sip_x} ${SIP_EXTRA_OPTIONS} -j ${SIP_CONCAT_PARTS} -c ${CMAKE_CURRENT_BINARY_DIR}/${_module_path} ${_sip_includes} ${_abs_module_sip} DEPENDS ${_abs_module_sip} -- cgit v1.2.1 From 1d8590c90685bb2778c4af587601632b5ee3c2b4 Mon Sep 17 00:00:00 2001 From: Laurent Montel Date: Sun, 26 Oct 2008 13:11:41 +0000 Subject: Allow to specify depend files. By default we depended just on sip module file and not against all sip files. svn path=/trunk/KDE/kdelibs/; revision=876086 --- modules/SIPMacros.cmake | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'modules/SIPMacros.cmake') diff --git a/modules/SIPMacros.cmake b/modules/SIPMacros.cmake index acb6204b..c9ca7136 100644 --- a/modules/SIPMacros.cmake +++ b/modules/SIPMacros.cmake @@ -43,7 +43,6 @@ SET(SIP_EXTRA_OPTIONS) MACRO(ADD_SIP_PYTHON_MODULE MODULE_NAME MODULE_SIP) - # FIXME this removes -fvisibility=hidden from the compiler flags and has global affect. STRING(REPLACE "-fvisibility=hidden" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) SET(EXTRA_LINK_LIBRARIES ${ARGN}) @@ -103,7 +102,7 @@ MACRO(ADD_SIP_PYTHON_MODULE MODULE_NAME MODULE_SIP) COMMAND ${CMAKE_COMMAND} -E echo ${message} COMMAND ${TOUCH_COMMAND} ${_sip_output_files} COMMAND ${SIP_EXECUTABLE} ${_sip_tags} ${_sip_x} ${SIP_EXTRA_OPTIONS} -j ${SIP_CONCAT_PARTS} -c ${CMAKE_CURRENT_BINARY_DIR}/${_module_path} ${_sip_includes} ${_abs_module_sip} - DEPENDS ${_abs_module_sip} + DEPENDS ${_abs_module_sip} ${SIP_EXTRA_FILES_DEPEND} ) ADD_LIBRARY(${_logical_name} SHARED ${_sip_output_files} ) -- cgit v1.2.1 From 9f8f5c5a93d60e23e52ea4dd82cc8638aecb8445 Mon Sep 17 00:00:00 2001 From: Simon Edwards Date: Wed, 31 Dec 2008 13:23:56 +0000 Subject: Removed this gcc visibility hack. It is no longer needed. svn path=/trunk/KDE/kdelibs/; revision=903773 --- modules/SIPMacros.cmake | 2 -- 1 file changed, 2 deletions(-) (limited to 'modules/SIPMacros.cmake') diff --git a/modules/SIPMacros.cmake b/modules/SIPMacros.cmake index c9ca7136..eb5ea06c 100644 --- a/modules/SIPMacros.cmake +++ b/modules/SIPMacros.cmake @@ -43,8 +43,6 @@ SET(SIP_EXTRA_OPTIONS) MACRO(ADD_SIP_PYTHON_MODULE MODULE_NAME MODULE_SIP) - # FIXME this removes -fvisibility=hidden from the compiler flags and has global affect. - STRING(REPLACE "-fvisibility=hidden" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) SET(EXTRA_LINK_LIBRARIES ${ARGN}) STRING(REPLACE "." "/" _x ${MODULE_NAME}) -- cgit v1.2.1 From c1cfe015fbc7f6244fe1fce8920de6088add61ee Mon Sep 17 00:00:00 2001 From: Ralf Habacker Date: Thu, 2 Jul 2009 06:03:54 +0000 Subject: Python modules should be MODULE, not SHARED, so they are installed correctly and not create import libs on Win32/Cygwin - by cygwin ports maintainer svn path=/trunk/KDE/kdelibs/; revision=990262 --- modules/SIPMacros.cmake | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'modules/SIPMacros.cmake') diff --git a/modules/SIPMacros.cmake b/modules/SIPMacros.cmake index eb5ea06c..6096ccb6 100644 --- a/modules/SIPMacros.cmake +++ b/modules/SIPMacros.cmake @@ -102,8 +102,12 @@ MACRO(ADD_SIP_PYTHON_MODULE MODULE_NAME MODULE_SIP) COMMAND ${SIP_EXECUTABLE} ${_sip_tags} ${_sip_x} ${SIP_EXTRA_OPTIONS} -j ${SIP_CONCAT_PARTS} -c ${CMAKE_CURRENT_BINARY_DIR}/${_module_path} ${_sip_includes} ${_abs_module_sip} DEPENDS ${_abs_module_sip} ${SIP_EXTRA_FILES_DEPEND} ) - - ADD_LIBRARY(${_logical_name} SHARED ${_sip_output_files} ) + # not sure if type MODULE could be uses anywhere, limit to cygwin for now + IF (CYGWIN) + ADD_LIBRARY(${_logical_name} MODULE ${_sip_output_files} ) + ELSE (CYGWIN) + ADD_LIBRARY(${_logical_name} SHARED ${_sip_output_files} ) + ENDIF (CYGWIN) TARGET_LINK_LIBRARIES(${_logical_name} ${PYTHON_LIBRARY}) TARGET_LINK_LIBRARIES(${_logical_name} ${EXTRA_LINK_LIBRARIES}) SET_TARGET_PROPERTIES(${_logical_name} PROPERTIES PREFIX "" OUTPUT_NAME ${_child_module_name}) -- cgit v1.2.1 From 74be49bb8ab1e89f6179dfdd65598e1cccc89e20 Mon Sep 17 00:00:00 2001 From: Michael Jansen Date: Fri, 23 Jul 2010 16:15:52 +0000 Subject: Make ADD_SIP_PYTHON_MODULE( test example.sip ...) work. Notice that there is no directory part before example.sip. This should have no impact on existing code. CCMAIL: kde-bindings@kde-org svn path=/trunk/KDE/kdelibs/; revision=1153601 --- modules/SIPMacros.cmake | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'modules/SIPMacros.cmake') diff --git a/modules/SIPMacros.cmake b/modules/SIPMacros.cmake index 6096ccb6..f5805a38 100644 --- a/modules/SIPMacros.cmake +++ b/modules/SIPMacros.cmake @@ -50,6 +50,13 @@ MACRO(ADD_SIP_PYTHON_MODULE MODULE_NAME MODULE_SIP) GET_FILENAME_COMPONENT(_child_module_name ${_x} NAME) GET_FILENAME_COMPONENT(_module_path ${MODULE_SIP} PATH) + + if(_module_path STREQUAL "") + set(CMAKE_CURRENT_SIP_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}") + else(_module_path STREQUAL "") + set(CMAKE_CURRENT_SIP_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/${_module_path}") + endif(_module_path STREQUAL "") + GET_FILENAME_COMPONENT(_abs_module_sip ${MODULE_SIP} ABSOLUTE) # We give this target a long logical target name. @@ -59,7 +66,7 @@ MACRO(ADD_SIP_PYTHON_MODULE MODULE_NAME MODULE_SIP) STRING(REPLACE "." "_" _logical_name ${MODULE_NAME}) SET(_logical_name "python_module_${_logical_name}") - FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_module_path}) # Output goes in this dir. + FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_SIP_OUTPUT_DIR}) # Output goes in this dir. SET(_sip_includes) FOREACH (_inc ${SIP_INCLUDES}) @@ -81,7 +88,7 @@ MACRO(ADD_SIP_PYTHON_MODULE MODULE_NAME MODULE_SIP) SET(_sip_output_files) FOREACH(CONCAT_NUM RANGE 0 ${SIP_CONCAT_PARTS} ) IF( ${CONCAT_NUM} LESS ${SIP_CONCAT_PARTS} ) - SET(_sip_output_files ${_sip_output_files} ${CMAKE_CURRENT_BINARY_DIR}/${_module_path}/sip${_child_module_name}part${CONCAT_NUM}.cpp ) + SET(_sip_output_files ${_sip_output_files} ${CMAKE_CURRENT_SIP_OUTPUT_DIR}/sip${_child_module_name}part${CONCAT_NUM}.cpp ) ENDIF( ${CONCAT_NUM} LESS ${SIP_CONCAT_PARTS} ) ENDFOREACH(CONCAT_NUM RANGE 0 ${SIP_CONCAT_PARTS} ) @@ -99,7 +106,7 @@ MACRO(ADD_SIP_PYTHON_MODULE MODULE_NAME MODULE_SIP) OUTPUT ${_sip_output_files} COMMAND ${CMAKE_COMMAND} -E echo ${message} COMMAND ${TOUCH_COMMAND} ${_sip_output_files} - COMMAND ${SIP_EXECUTABLE} ${_sip_tags} ${_sip_x} ${SIP_EXTRA_OPTIONS} -j ${SIP_CONCAT_PARTS} -c ${CMAKE_CURRENT_BINARY_DIR}/${_module_path} ${_sip_includes} ${_abs_module_sip} + COMMAND ${SIP_EXECUTABLE} ${_sip_tags} ${_sip_x} ${SIP_EXTRA_OPTIONS} -j ${SIP_CONCAT_PARTS} -c ${CMAKE_CURRENT_SIP_OUTPUT_DIR} ${_sip_includes} ${_abs_module_sip} DEPENDS ${_abs_module_sip} ${SIP_EXTRA_FILES_DEPEND} ) # not sure if type MODULE could be uses anywhere, limit to cygwin for now -- cgit v1.2.1 From 91d46ffaa552f2f25ce0976511779f5a72383ade Mon Sep 17 00:00:00 2001 From: Michael Jansen Date: Fri, 23 Jul 2010 16:15:53 +0000 Subject: Use PYTHON_SITE_PACKAGES_INSTALL_DIR for installing python modules. See FindPythonLibrary.cmake for an explanation of the variable. CCMAIL: kde-bindings@kde.org svn path=/trunk/KDE/kdelibs/; revision=1153602 --- modules/SIPMacros.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'modules/SIPMacros.cmake') diff --git a/modules/SIPMacros.cmake b/modules/SIPMacros.cmake index f5805a38..28c1cf4c 100644 --- a/modules/SIPMacros.cmake +++ b/modules/SIPMacros.cmake @@ -119,6 +119,6 @@ MACRO(ADD_SIP_PYTHON_MODULE MODULE_NAME MODULE_SIP) TARGET_LINK_LIBRARIES(${_logical_name} ${EXTRA_LINK_LIBRARIES}) SET_TARGET_PROPERTIES(${_logical_name} PROPERTIES PREFIX "" OUTPUT_NAME ${_child_module_name}) - INSTALL(TARGETS ${_logical_name} DESTINATION "${PYTHON_SITE_PACKAGES_DIR}/${_parent_module_path}") + INSTALL(TARGETS ${_logical_name} DESTINATION "${PYTHON_SITE_PACKAGES_INSTALL_DIR}/${_parent_module_path}") ENDMACRO(ADD_SIP_PYTHON_MODULE) -- cgit v1.2.1