[CMake] Swig dependencies again

James Bigler bigler at cs.utah.edu
Thu Aug 17 16:47:58 EDT 2006


I'm trying to implement the stuff found in

http://www.cmake.org/Bug/bug.php?op=show&bugid=1731
http://www.cmake.org/Bug/bug.php?op=show&bugid=2172
http://www.cmake.org/pipermail/cmake/2005-August/007102.html
http://www.itk.org/cgi-bin/viewcvs.cgi/Wrapping/CSwig/CMakeLists.txt?rev=1.55&root=Insight&view=auto

Here's the general idea:

Basically the custom command runs the first time because the output is
not present.  The custom command generates its output AND a list of
dependencies.  The list is dumped via copy-if-different to a file that
is read by CMake.  This causes CMake to re-run and include the list of
dependencies in the DEPENDS argument of the custom command.

I can't seem to figure out how this is working in this giant file.

CSWIG_CREATE_PYTHON_CXX_FILE seems to build the dependency file from swig:

=====================================================================
MACRO(CSWIG_CREATE_PYTHON_CXX_FILE Bin MasterIdx InputIdx InputXml 
OutputTclCxx Library LibraryIndexFiles)
    SET(CINDEX)
    FOREACH(MIDX ${MasterIdx})
      SET(CINDEX ${CINDEX} -Cindex "${MIDX}")
    ENDFOREACH(MIDX)
    IF("${InputXml}" MATCHES "${ITK_CSWIG_PYTHON_NO_EXCEPTION_REGEX}")
      SET(ITK_SWG_FILE "")
    ELSE("${InputXml}" MATCHES "${ITK_CSWIG_PYTHON_NO_EXCEPTION_REGEX}")
      SET(ITK_SWG_FILE "-l${ITK_TOP}/Wrapping/CSwig/itk.swg")
    ENDIF("${InputXml}" MATCHES "${ITK_CSWIG_PYTHON_NO_EXCEPTION_REGEX}")
    ADD_CUSTOM_COMMAND(
      COMMENT "${OutputTclCxx} from "
      SOURCE ${Bin}/${InputIdx}
      COMMAND ${CSWIG}
      ARGS ${ITK_SWG_FILE}
           -I${ITK_SWIG_DEFAULT_LIB}
           -I${ITK_SWIG_DEFAULT_LIB}/python
           -noruntime ${CINDEX} ${IGNORE_WARNINGS} -depend 
${Bin}/${InputXml}.depend
           -outdir "${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}"
           -o ${Bin}/${OutputTclCxx} -python -c++ ${Bin}/${InputXml}
      TARGET ${Library}
      OUTPUTS ${Bin}/${OutputTclCxx}
      DEPENDS ${LibraryIndexFiles}  ${ITK_TOP}/Wrapping/CSwig/itk.swg 
${ITK_TOP}/Wrapping/CSwig/itk.swg ${Bin}/${InputXml} ${CSWIG} )
ENDMACRO(CSWIG_CREATE_PYTHON_CXX_FILE)
====================================================================

However, I don't see how the dependency file is pulled into CMake.

Where is the copy-if-different in this example file?

I'm so very confused and frustrated.  Perhaps someone could give me a 
simple example where dependency files are generated and pulled in, please.

Thanks,
James



More information about the CMake mailing list