macro (pip_code_model SRC RESULT) set(RESULT "") set(OPTS "") set(_IS_OPT false) foreach (_A ${ARGN}) #message(STATUS ${_A}) if (_IS_OPT) list (APPEND OPTS ${_A}) else () if ("${_A}" STREQUAL "OPTIONS") set(_IS_OPT true) else () set (RESULT ${_A}) endif () endif () endforeach() #message(STATUS "src = ${CMAKE_CURRENT_SOURCE_DIR}/${SRC}") #message(STATUS "result = ${RESULT}") #message(STATUS "options = ${OPTS}") set(NEED_PARSE FALSE CACHE BOOL "NEED_PARSE" FORCE) if (DEFINED CACHE_CMG_FILES) string(REPLACE " " ";" CMG_LIST_C "${CACHE_CMG_FILES}") foreach (CF ${CMG_LIST_C}) file (TIMESTAMP ${CF} ATIME) if (NOT TIME_${CF} STREQUAL ATIME) set(NEED_PARSE TRUE) #message(STATUS "MOD cache") endif () set(TIME_${CF} ${ATIME} CACHE INTERNAL TIME_${CF} FORCE) #message (STATUS ${CF} ": " ${ATIME}) endforeach (CF) else () set(NEED_PARSE TRUE) #message(STATUS "NEW cache") endif () set(${RESULT} ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_ccm.cpp) #message(STATUS "Res = ${${RESULT}}") if (NOT EXISTS ${${RESULT}}) set(NEED_PARSE TRUE) endif () if (NEED_PARSE) message(STATUS "Creating code model based on \"${SRC}\", please wait ... ") #message(STATUS "exec \"-qP ${OPTS} -o ${PROJECT_NAME}_ccm -I${PIP_INCLUDES} ${SRC}\"") #message(STATUS "exec ${PIP_CMG} -P ${OPTS} -o ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_ccm -I${PIP_INCLUDES} ${CMAKE_CURRENT_SOURCE_DIR}/${SRC}") execute_process(OUTPUT_VARIABLE CMG_OUT COMMAND ${PIP_CMG} -qP ${OPTS} -o ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_ccm -I${PIP_INCLUDES} ${CMAKE_CURRENT_SOURCE_DIR}/${SRC}) message(STATUS "Creating code model done, to use it include \"${PROJECT_NAME}_ccm.h\"") string(REPLACE "\n" ";" CMG_LIST "${CMG_OUT}") string(REPLACE "\n" " " CMG_LIST_S "${CMG_OUT}") set(CACHE_CMG_FILES ${CMG_LIST_S} CACHE INTERNAL "CACHE_CMG_FILES" FORCE) foreach (CF ${CMG_LIST}) file (TIMESTAMP ${CF} ATIME) set(TIME_${CF} ${ATIME} CACHE INTERNAL TIME_${CF} FORCE) endforeach (CF) else () message(STATUS "Code model is up to date :-)") endif () #message(STATUS ${CMG_OUT}) #message(STATUS ${CACHE_CMG_FILES}) endmacro (pip_code_model)