Add a new function SWIG_GET_WRAPPER_DEPENDENCIES to UseSWIG.cmake
This commit fixes BUG: 0004147 it directly uses swig executable to compute a list of dependencies directly from the .i files to make sure to rebuild the swig module any of its direct dep. is touched
This commit is contained in:
parent
0e66141bea
commit
1088b0278e
|
@ -4,6 +4,9 @@
|
|||
# - Define swig module with given name and specified language
|
||||
# SWIG_LINK_LIBRARIES(name [ libraries ])
|
||||
# - Link libraries to swig module
|
||||
# SWIG_GET_WRAPPER_DEPENDENCIES(swigFile genWrapper language DEST_VARIABLE)
|
||||
# - Put dependencies of the wrapper genWrapper generated by swig from
|
||||
# swigFile in DEST_VARIABLE
|
||||
# All other macros are for internal use only.
|
||||
# To get the actual name of the swig module,
|
||||
# use: ${SWIG_MODULE_${name}_REAL_NAME}.
|
||||
|
@ -38,6 +41,58 @@ SET(SWIG_EXTRA_LIBRARIES "")
|
|||
|
||||
SET(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")
|
||||
|
||||
#
|
||||
# Get dependencies of the generated wrapper.
|
||||
#
|
||||
MACRO(SWIG_GET_WRAPPER_DEPENDENCIES swigFile genWrapper language DEST_VARIABLE)
|
||||
GET_FILENAME_COMPONENT(swig_getdeps_basename ${swigFile} NAME_WE)
|
||||
GET_FILENAME_COMPONENT(swig_getdeps_outdir ${genWrapper} PATH)
|
||||
GET_SOURCE_FILE_PROPERTY(swig_getdeps_extra_flags "${swigFile}" SWIG_FLAGS)
|
||||
IF("${swig_getdeps_extra_flags}" STREQUAL "NOTFOUND")
|
||||
SET(swig_getdeps_extra_flags "")
|
||||
ENDIF("${swig_getdeps_extra_flags}" STREQUAL "NOTFOUND")
|
||||
|
||||
IF(NOT swig_getdeps_outdir)
|
||||
SET(swig_getdeps_outdir ${CMAKE_CURRENT_BINARY_DIR})
|
||||
ENDIF(NOT swig_getdeps_outdir)
|
||||
SET(swig_getdeps_depsfile
|
||||
${swig_getdeps_outdir}/swig_${swig_getdeps_basename}_deps.txt)
|
||||
GET_DIRECTORY_PROPERTY(swig_getdeps_include_directories INCLUDE_DIRECTORIES)
|
||||
SET(swig_getdeps_include_dirs)
|
||||
FOREACH(it ${swig_getdeps_include_directories})
|
||||
SET(swig_getdeps_include_dirs ${swig_getdeps_include_dirs} "-I${it}")
|
||||
ENDFOREACH(it)
|
||||
EXECUTE_PROCESS(
|
||||
COMMAND ${SWIG_EXECUTABLE}
|
||||
-MM -MF ${swig_getdeps_depsfile} ${swig_getdeps_extra_flags}
|
||||
${CMAKE_SWIG_FLAGS} -${language}
|
||||
-o ${genWrapper} ${swig_getdeps_include_dirs} ${swigFile}
|
||||
RESULT_VARIABLE swig_getdeps_result
|
||||
ERROR_VARIABLE swig_getdeps_error
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
IF(NOT ${swig_getdeps_error} EQUAL 0)
|
||||
MESSAGE(SEND_ERROR "Command \"${SWIG_EXECUTABLE} -MM -MF ${swig_getdeps_depsfile} ${swig_getdeps_extra_flags} ${CMAKE_SWIG_FLAGS} -${language} -o ${genWrapper} ${swig_getdeps_include_dirs} ${swigFile}\" failed with output:\n${swig_getdeps_error}")
|
||||
SET(swig_getdeps_dependencies "")
|
||||
ELSE(NOT ${swig_getdeps_error} EQUAL 0)
|
||||
FILE(READ ${swig_getdeps_depsfile} ${DEST_VARIABLE})
|
||||
# Remove the first line
|
||||
STRING(REGEX REPLACE "^.+: +\\\\\n +" ""
|
||||
${DEST_VARIABLE} "${${DEST_VARIABLE}}")
|
||||
# Clean the end of each line
|
||||
STRING(REGEX REPLACE " +(\\\\)?\n" "\n" ${DEST_VARIABLE}
|
||||
"${${DEST_VARIABLE}}")
|
||||
# Clean beginning of each line
|
||||
STRING(REGEX REPLACE "\n +" "\n"
|
||||
${DEST_VARIABLE} "${${DEST_VARIABLE}}")
|
||||
# clean paths
|
||||
STRING(REGEX REPLACE "\\\\\\\\" "/" ${DEST_VARIABLE}
|
||||
"${${DEST_VARIABLE}}")
|
||||
STRING(REGEX REPLACE "\n" ";"
|
||||
${DEST_VARIABLE} "${${DEST_VARIABLE}}")
|
||||
ENDIF(NOT ${swig_getdeps_error} EQUAL 0)
|
||||
ENDMACRO(SWIG_GET_WRAPPER_DEPENDENCIES)
|
||||
|
||||
|
||||
#
|
||||
# For given swig module initialize variables associated with it
|
||||
#
|
||||
|
@ -166,6 +221,10 @@ MACRO(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
|
|||
IF(SWIG_MODULE_${name}_EXTRA_FLAGS)
|
||||
SET(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})
|
||||
ENDIF(SWIG_MODULE_${name}_EXTRA_FLAGS)
|
||||
SWIG_GET_WRAPPER_DEPENDENCIES("${swig_source_file_fullname}"
|
||||
"${swig_generated_file_fullname}" ${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}
|
||||
swig_extra_dependencies)
|
||||
LIST(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${swig_extra_dependencies})
|
||||
ADD_CUSTOM_COMMAND(
|
||||
OUTPUT "${swig_generated_file_fullname}" ${swig_extra_generated_files}
|
||||
COMMAND "${SWIG_EXECUTABLE}"
|
||||
|
|
Loading…
Reference in New Issue