Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #
- # SourceGroupByDirname.cmake - routines for groupping files by the dirname
- #
- IF(NOT DEFINED TARGET_GROUP_SOURCES_DEBUG)
- SET(TARGET_GROUP_SOURCES_DEBUG FALSE)
- ENDIF()
- FUNCTION(DIRNAME OUTPUT_VARIABLE PATHNAME)
- STRING(REPLACE / ";" PATHLIST "${PATHNAME}")
- LIST(LENGTH PATHLIST PATH_LENGTH)
- MATH(EXPR LAST_INDEX "${PATH_LENGTH} - 1")
- LIST(REMOVE_AT PATHLIST ${LAST_INDEX})
- STRING(REPLACE ";" / RESULT "${PATHLIST}")
- SET(${OUTPUT_VARIABLE} ${RESULT} PARENT_SCOPE)
- ENDFUNCTION()
- FUNCTION(IS_PREFIX_OF PREFIX LIST OUTPUT_VARIABLE)
- LIST(LENGTH PREFIX PREFIX_LENGTH)
- LIST(LENGTH LIST LIST_LENGTH)
- IF(PREFIX_LENGTH LESS LIST_LENGTH)
- SET(RESULT TRUE)
- MATH(EXPR LAST_PREFIX_INDEX "${PREFIX_LENGTH} - 1")
- FOREACH(I RANGE ${LAST_PREFIX_INDEX})
- LIST(GET PREFIX ${I} PREFIX_I)
- LIST(GET LIST ${I} LIST_I)
- IF(NOT PREFIX_I STREQUAL LIST_I)
- SET(RESULT FALSE)
- ENDIF()
- ENDFOREACH()
- ELSE()
- SET(RESULT FALSE)
- ENDIF()
- SET(${OUTPUT_VARIABLE} ${RESULT} PARENT_SCOPE)
- ENDFUNCTION()
- FUNCTION(IS_PATH_PREFIX_OF PREFIX PATH OUTPUT_VARIABLE)
- STRING(REPLACE / ";" PREFIX_LIST "${PREFIX}")
- STRING(REPLACE / ";" PATH_LIST "${PATH}")
- IS_PREFIX_OF("${PREFIX_LIST}" "${PATH_LIST}" RESULT)
- SET(${OUTPUT_VARIABLE} ${RESULT} PARENT_SCOPE)
- ENDFUNCTION()
- FUNCTION(REMOVE_PREFIX LIST PREFIX_LENGTH OUTPUT_VARIABLE)
- FOREACH(I RANGE 1 ${PREFIX_LENGTH})
- LIST(REMOVE_AT LIST 0)
- ENDFOREACH()
- SET(${OUTPUT_VARIABLE} "${LIST}" PARENT_SCOPE)
- ENDFUNCTION()
- FUNCTION(REMOVE_PATH_PREFIX PATH COMPONENT_COUNT OUTPUT_VARIABLE)
- STRING(REPLACE / ";" PATH_LIST "${PATH}")
- REMOVE_PREFIX("${PATH_LIST}" ${COMPONENT_COUNT} RESULT)
- STRING(REPLACE ";" / RESULT "${RESULT}")
- SET(${OUTPUT_VARIABLE} ${RESULT} PARENT_SCOPE)
- ENDFUNCTION()
- FUNCTION(PATH_COMPOMENTS PATH OUTPUT_VARIABLE)
- STRING(REPLACE / ";" PATH_LIST "${PATH}")
- LIST(LENGTH PATH_LIST RESULT)
- SET(${OUTPUT_VARIABLE} ${RESULT} PARENT_SCOPE)
- ENDFUNCTION()
- FUNCTION(GROUP_FILE_BY_DIRNAME PATHNAME DIRNAME)
- IF(ARGC EQUAL 3)
- LIST(GET ARGV 2 GROUP_PREFIX)
- SET(GROUP_PREFIX "${GROUP_PREFIX}")
- ELSEIF(ARGC GREATER 3)
- MESSAGE(SEND_ERROR "GROUP_FILE_BY_DIRNAME must be called with 2 or 3 arguments")
- RETURN()
- ENDIF()
- IS_PATH_PREFIX_OF("${DIRNAME}" "${PATHNAME}" IN_DIR)
- IF (IN_DIR)
- PATH_COMPOMENTS("${DIRNAME}" DIRNAME_LENGTH)
- DIRNAME(DIR "${PATHNAME}")
- REMOVE_PATH_PREFIX("${DIR}" ${DIRNAME_LENGTH} GROUP_NAME)
- STRING(REPLACE / \\ GROUP_NAME "${GROUP_NAME}")
- IF(GROUP_NAME)
- IF(TARGET_GROUP_SOURCES_DEBUG)
- MESSAGE(STATUS "Adding file ${PATHNAME} to the group ${GROUP_PREFIX}\\${GROUP_NAME}")
- ENDIF()
- SOURCE_GROUP("${GROUP_PREFIX}\\${GROUP_NAME}" FILES "${PATHNAME}")
- ELSE()
- IF(TARGET_GROUP_SOURCES_DEBUG)
- MESSAGE(STATUS "Adding file ${PATHNAME} to the group ${GROUP_PREFIX}")
- ENDIF()
- SOURCE_GROUP("${GROUP_PREFIX}" FILES "${PATHNAME}")
- ENDIF()
- ENDIF()
- ENDFUNCTION()
- FUNCTION(TARGET_GROUP_SOURCES TARGET)
- MATH(EXPR CORRECT_ARGC "(${ARGC} - 1) % 4")
- IF(NOT CORRECT_ARGC EQUAL 0)
- MESSAGE(SEND_ERROR "Incorrect arguments for TARGET_GROUP_SOURCES, expecting TARGET_GROUP_SOURCES(target DIR dir GROUP group ...)")
- RETURN()
- ENDIF()
- MATH(EXPR LAST_WORD_INDEX "${ARGC} - 2")
- FOREACH(WORD_INDEX RANGE 0 ${LAST_WORD_INDEX} 4)
- LIST(GET ARGN ${WORD_INDEX} WORD)
- IF(NOT WORD STREQUAL DIR)
- MESSAGE(SEND_ERROR "Incorrect arguments for TARGET_GROUP_SOURCES, expecting TARGET_GROUP_SOURCES(target DIR dir GROUP group ...)")
- RETURN()
- ENDIF()
- ENDFOREACH()
- FOREACH(WORD_INDEX RANGE 2 ${LAST_WORD_INDEX} 4)
- LIST(GET ARGN ${WORD_INDEX} WORD)
- IF(NOT WORD STREQUAL GROUP)
- MESSAGE(SEND_ERROR "Incorrect arguments for TARGET_GROUP_SOURCES, expecting TARGET_GROUP_SOURCES(target DIR dir GROUP group ...)")
- RETURN()
- ENDIF()
- ENDFOREACH()
- GET_PROPERTY(FILES TARGET ${TARGET} PROPERTY SOURCES)
- FOREACH(F ${FILES})
- FOREACH(WORD_INDEX RANGE 1 ${LAST_WORD_INDEX} 4)
- MATH(EXPR NEXT_WORD_INDEX "${WORD_INDEX} + 2")
- LIST(GET ARGN ${WORD_INDEX} DIR_NAME)
- LIST(GET ARGN ${NEXT_WORD_INDEX} GROUP_NAME)
- GROUP_FILE_BY_DIRNAME("${F}" ${DIR_NAME} ${GROUP_NAME})
- ENDFOREACH()
- ENDFOREACH()
- ENDFUNCTION()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement