| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 | #############################################################################  Library:   CTK##  Copyright (c) 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.apache.org/licenses/LICENSE-2.0.txt##  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.############################################################################## ctkScriptMocPythonQtWrapper### 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#      -DOUTPUT_DIR:PATH=/path#      -DMOC_FLAGS:STRING=-I/path/to/lib1^^-I/path/to/lib2^^-DOPT1#      -DWRAPPER_MASTER_MOC_FILE:FILEPATH=/path/to/file#      -DQT_QMAKE_EXECUTABLE:PATH=/path/to/qt/qmake#      -P ctkScriptMocPythonQtWrapper.cmake### Check for non-defined varforeach(var WRAPPING_NAMESPACE TARGET MOC_FLAGS WRAPPER_MASTER_MOC_FILE WRAP_INT_DIR)  if(NOT DEFINED ${var})    message(FATAL_ERROR "${var} not specified when calling ctkScriptMocPythonQtWrapper")  endif()endforeach()# Check for non-existing ${var}foreach(var OUTPUT_DIR QT_MOC_EXECUTABLE)  if(NOT EXISTS ${${var}})    message(FATAL_ERROR "Failed to find ${var} when calling ctkScriptWrapPythonQt")  endif()endforeach()# Convert wrapping namespace to subdirstring(REPLACE "." "_" WRAPPING_NAMESPACE_UNDERSCORE ${WRAPPING_NAMESPACE})# Read moc flags from fileif(WIN32)  if(NOT EXISTS ${MOC_FLAGS})    message(FATAL_ERROR "On Windows, MOC_FLAGS should be the name of the file containing the moc flags !")  endif()  file(READ ${MOC_FLAGS} MOC_FLAGS)endif()# Convert ^^ separated string to liststring(REPLACE "^^" ";" MOC_FLAGS "${MOC_FLAGS}")# Clear file where all moc'ified will be appendedfile(WRITE ${WRAPPER_MASTER_MOC_FILE} "// // File auto-generated by cmake macro ctkScriptMocPythonQtWrapper\n//\n")# Collect wrapper headersset(glob_expression ${OUTPUT_DIR}/${WRAP_INT_DIR}${WRAPPING_NAMESPACE_UNDERSCORE}_${TARGET}*.h)file(GLOB wrapper_headers RELATIVE ${OUTPUT_DIR}/${WRAP_INT_DIR} ${glob_expression})if(NOT wrapper_headers)  message(FATAL_ERROR "ctkScriptMocPythonQtWrapper - Failed to glob wrapper headers using expression:[${glob_expression}]")endif()# Moc'ified each one of themforeach(header ${wrapper_headers})    set(moc_extra_options)  set(wrapper_h_file ${OUTPUT_DIR}/${WRAP_INT_DIR}/${header})  set(wrapper_moc_file ${OUTPUT_DIR}/${WRAP_INT_DIR}/moc_${header}.cpp)    # Dump moc executable options into a file to avoid command line length limitations  # See http://qt-project.org/doc/qt-4.8/moc.html#command-line-options    # As required when using the @ option of moc executable, process MOC_FLAGS list   # to obtain a string with one flag per line  set(moc_flags_with_newline "")  foreach(flag ${MOC_FLAGS})    set(moc_flags_with_newline "${moc_flags_with_newline}\n${flag}")  endforeach()    # Dump flags into a file  get_filename_component(header_we ${header} NAME_WE)  set(wrapper_moc_options_file ${OUTPUT_DIR}/${WRAP_INT_DIR}/${header_we}_moc_opts.txt)  file(WRITE ${wrapper_moc_options_file}"${moc_flags_with_newline}${moc_extra_options}")  message("${QT_MOC_EXECUTABLE} @${wrapper_moc_options_file} -o ${wrapper_moc_file} ${wrapper_h_file}")  # Invoke moc executable passing "@" parameter  execute_process(    COMMAND ${QT_MOC_EXECUTABLE} @${wrapper_moc_options_file} -o ${wrapper_moc_file} ${wrapper_h_file}    WORKING_DIRECTORY ${OUTPUT_DIR}    RESULT_VARIABLE RESULT_VAR    ERROR_VARIABLE error    )  if(RESULT_VAR)    message(FATAL_ERROR "Failed to moc'ified .\n${RESULT_VAR}\n${error}")  endif()    # Append generated moc file to the master file  file(READ ${wrapper_moc_file} file_content)  file(APPEND ${WRAPPER_MASTER_MOC_FILE} "${file_content}")endforeach()
 |