cmake: allow source_group to preserve file-system tree (for MSVS)

This commit is contained in:
Alexander Alekhin
2013-12-05 03:23:52 +04:00
parent d368bf5210
commit 0eb2be762a
2 changed files with 60 additions and 14 deletions

View File

@@ -1,3 +1,22 @@
# Debugging function
function(ocv_cmake_dump_vars)
cmake_parse_arguments(DUMP "" "TOFILE" "" ${ARGN})
set(regex "${DUMP_UNPARSED_ARGUMENTS}")
get_cmake_property(_variableNames VARIABLES)
set(VARS "")
foreach(_variableName ${_variableNames})
if(_variableName MATCHES "${regex}")
set(VARS "${VARS}${_variableName}=${${_variableName}}\n")
endif()
endforeach()
if(DUMP_TOFILE)
file(WRITE ${CMAKE_BINARY_DIR}/${DUMP_TOFILE} "${VARS}")
else()
message(AUTHOR_WARNING "${VARS}")
endif()
endfunction()
# Search packages for host system instead of packages for target system
# in case of cross compilation thess macro should be defined by toolchain file
if(NOT COMMAND find_host_package)
@@ -601,7 +620,35 @@ endmacro()
################################################################################################
# short command to setup source group
function(ocv_source_group group)
cmake_parse_arguments(OCV_SOURCE_GROUP "" "" "GLOB" ${ARGN})
file(GLOB srcs ${OCV_SOURCE_GROUP_GLOB})
source_group(${group} FILES ${srcs})
cmake_parse_arguments(SG "" "DIRBASE" "GLOB;GLOB_RECURSE;FILES" ${ARGN})
set(files "")
if(SG_FILES)
list(APPEND files ${SG_FILES})
endif()
if(SG_GLOB)
file(GLOB srcs ${SG_GLOB})
list(APPEND files ${srcs})
endif()
if(SG_GLOB_RECURSE)
file(GLOB_RECURSE srcs ${SG_GLOB_RECURSE})
list(APPEND files ${srcs})
endif()
if(SG_DIRBASE)
foreach(f ${files})
file(RELATIVE_PATH fpart "${SG_DIRBASE}" "${f}")
if(fpart MATCHES "^\\.\\.")
message(AUTHOR_WARNING "Can't detect subpath for source_group command: Group=${group} FILE=${f} DIRBASE=${SG_DIRBASE}")
set(fpart "")
else()
get_filename_component(fpart "${fpart}" PATH)
if(fpart)
set(fpart "/${fpart}") # add '/'
string(REPLACE "/" "\\" fpart "${fpart}")
endif()
endif()
source_group("${group}${fpart}" FILES ${f})
endforeach()
else()
source_group(${group} FILES ${files})
endif()
endfunction()