| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 | #############################################################################  Library:   CTK# #  Copyright (c) 2010  Kitware Inc.##  Licensed under the Apache License, Version 2.0 (the "License");#  you may not use this file except in compliance with the License.#  You may obtain a copy of the License at##      http://www.commontk.org/LICENSE##  Unless required by applicable law or agreed to in writing, software#  distributed under the License is distributed on an "AS IS" BASIS,#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.#  See the License for the specific language governing permissions and#  limitations under the License.# ############################################################################# ctkScriptWrapPythonQt_Full### Depends on:#  CTK/CMake/ctkMacroWrapPythonQt.cmake### This script should be invoked either as a CUSTOM_COMMAND # or from the command line using the following syntax:##    cmake -DWRAPPING_NAMESPACE:STRING=org.commontk -DTARGET:STRING=MyLib #          -DSOURCES:STRING="file1^^file2" -DINCLUDE_DIRS:STRING=/path1:/path2#          -DWRAP_INT_DIR:STRING=subir/subir/#          -DPYTHONQTGENERATOR_EXECUTABLE:FILEPATH=/path/to/exec#          -DOUTPUT_DIR:PATH=/path  -DQT_QMAKE_EXECUTABLE:PATH=/path/to/qt/qmake#          -P ctkScriptWrapPythonQt_Full.cmake## Check for non-defined varFOREACH(var SOURCES TARGET INCLUDE_DIRS WRAP_INT_DIR WRAPPING_NAMESPACE)  IF(NOT DEFINED ${var})    MESSAGE(SEND_ERROR "${var} not specified when calling ctkScriptWrapPythonQt")  ENDIF()ENDFOREACH()# Check for non-existing ${var}FOREACH(var PYTHONQTGENERATOR_EXECUTABLE QT_QMAKE_EXECUTABLE OUTPUT_DIR)  IF(NOT EXISTS ${${var}})    MESSAGE(SEND_ERROR "Failed to find ${var} when calling ctkScriptWrapPythonQt")  ENDIF()ENDFOREACH()# Convert wrapping namespace to subdirSTRING(REPLACE "." "_" WRAPPING_NAMESPACE_UNDERSCORE ${WRAPPING_NAMESPACE})# Convert ^^ separated string to listSTRING(REPLACE "^^" ";" SOURCES "${SOURCES}")FOREACH(FILE ${SOURCES})  # what is the filename without the extension  GET_FILENAME_COMPONENT(TMP_FILENAME ${FILE} NAME_WE)      SET(includes     "${includes}\n#include \"${TMP_FILENAME}.h\"")          # Extract classname - NOTE: We assume the filename matches the associated class  set(className ${TMP_FILENAME})  #message(STATUS "FILE:${FILE}, className:${className}")  SET(objectTypes "${objectTypes}\n  <object-type name=\"${className}\"/>")ENDFOREACH()# Write master include file  FILE(WRITE ${OUTPUT_DIR}/${WRAP_INT_DIR}ctkPythonQt_${TARGET}_masterinclude.h "#ifndef __ctkPythonQt_${TARGET}_masterinclude_h#define __ctkPythonQt_${TARGET}_masterinclude_h${includes}#endif")# Write Typesystem fileFILE(WRITE ${OUTPUT_DIR}/${WRAP_INT_DIR}typesystem_${TARGET}.xml "<typesystem package=\"${WRAPPING_NAMESPACE}.${TARGET}\">  ${objectTypes}</typesystem>")# Extract PYTHONQTGENERATOR_DIR GET_FILENAME_COMPONENT(PYTHONQTGENERATOR_DIR ${PYTHONQTGENERATOR_EXECUTABLE} PATH)#message(PYTHONQTGENERATOR_DIR:${PYTHONQTGENERATOR_DIR})# Write Build fileFILE(WRITE ${OUTPUT_DIR}/${WRAP_INT_DIR}build_${TARGET}.txt "<!-- File auto-generated by cmake macro ctkScriptWrapPythonQt_Full --><typesystem>  <load-typesystem name=\"${PYTHONQTGENERATOR_DIR}/typesystem_core.xml\" generate=\"no\" />  <load-typesystem name=\"${PYTHONQTGENERATOR_DIR}/typesystem_gui.xml\" generate=\"no\" />  <load-typesystem name=\"${OUTPUT_DIR}/${WRAP_INT_DIR}/typesystem_${TARGET}.xml\" generate=\"yes\" /></typesystem>")# Compute QTDIRGET_FILENAME_COMPONENT(QTDIR ${QT_QMAKE_EXECUTABLE}/../../ REALPATH)SET(ENV{QTDIR} ${QTDIR})EXECUTE_PROCESS(  COMMAND ${PYTHONQTGENERATOR_EXECUTABLE} --debug-level=sparse --include-paths=${INCLUDE_DIRS} --output-directory=${OUTPUT_DIR} ${OUTPUT_DIR}/${WRAP_INT_DIR}ctkPythonQt_${TARGET}_masterinclude.h ${OUTPUT_DIR}/${WRAP_INT_DIR}build_${TARGET}.txt  WORKING_DIRECTORY ${PYTHONQTGENERATOR_DIR}  RESULT_VARIABLE result  #OUTPUT_VARIABLE output  ERROR_VARIABLE error  OUTPUT_QUIET  )#message(${error})IF(result)  MESSAGE(FATAL_ERROR "Failed to generate ${WRAPPING_NAMESPACE_UNDERSCORE}_${TARGET}_init.cpp\n${error}")ENDIF()# Since PythonQtGenerator or FILE(WRITE ) doesn't 'update the timestamp - Let's touch the filesEXECUTE_PROCESS(  COMMAND ${CMAKE_COMMAND} -E touch     ${OUTPUT_DIR}/${WRAP_INT_DIR}${WRAPPING_NAMESPACE_UNDERSCORE}_${TARGET}_init.cpp    ${OUTPUT_DIR}/${WRAP_INT_DIR}ctkPythonQt_${TARGET}_masterinclude.h  )
 |