string (REPLACE " " ";" FILES ${FILES}) # make back into a list function(JOIN VALUES GLUE OUTPUT) string (REGEX REPLACE "([^\\]|^);" "\\1${GLUE}" _TMP_STR "${VALUES}") string (REGEX REPLACE "[\\](.)" "\\1" _TMP_STR "${_TMP_STR}") #fixes escaping set (${OUTPUT} "${_TMP_STR}" PARENT_SCOPE) endfunction() function (indent) foreach (temp RANGE ${level}) file (APPEND ${contents_file} " ") endforeach () endfunction () function (end_entry) file (APPEND ${contents_file} "\n") set(first 0 PARENT_SCOPE) math (EXPR level "${level} - 1") indent () file (APPEND ${contents_file} "]\n") math (EXPR level "${level} - 2") indent () file (APPEND ${contents_file} "}") string (FIND "${dirs}" "${cwd}" pos) set (level ${level} PARENT_SCOPE) endfunction () file (WRITE ${contents_file} "[") set (cwd) set (level 0) set (first 1) list (SORT FILES) foreach (file IN LISTS FILES) string (REGEX MATCHALL "[^/]*/" dirs "${file}") string (REPLACE "/" "" dirs "${dirs}") string (REGEX MATCH "[^/]*$" name "${file}") string (FIND "${dirs}" "${cwd}" pos) list (LENGTH cwd cwd_count) if (${pos} EQUAL 0) # same root while (${cwd_count} GREATER 0) list (REMOVE_AT dirs 0) math (EXPR cwd_count "${cwd_count} - 1") endwhile () else () # reduce cwd until matched while ((NOT ${pos} EQUAL 0) AND ${cwd_count} GREATER 0) math (EXPR cwd_count "${cwd_count} - 1") list (REMOVE_AT cwd ${cwd_count}) string (FIND "${dirs}" "${cwd}" pos) end_entry () endwhile () # back to same root while (${cwd_count} GREATER 0) list (REMOVE_AT dirs 0) math (EXPR cwd_count "${cwd_count} - 1") endwhile () endif () list (LENGTH cwd cwd_count) list (LENGTH dirs path_count) while (${path_count} GREATER 0) list (GET dirs 0 dir) list (APPEND cwd "${dir}") list (REMOVE_AT dirs 0) if (${first}) file (APPEND ${contents_file} "\n") set (first 0) else () file (APPEND ${contents_file} ",\n") endif () indent () file (APPEND ${contents_file} "{\n") math (EXPR level "${level} + 1") indent () file (APPEND ${contents_file} "\"type\": \"directory\",\n") indent () file (APPEND ${contents_file} "\"name\": \"${dir}\",\n") indent () file (APPEND ${contents_file} "\"entries\": [") set (first 1) math (EXPR level "${level} + 2") math (EXPR path_count "${path_count} - 1") endwhile () JOIN ("${cwd}" "/" path) file (COPY "${file}" DESTINATION "${DEST}/web/samples/${path}") if (${first}) file (APPEND ${contents_file} "\n") set (first 0) else () file (APPEND ${contents_file} ",\n") endif () indent () file (APPEND ${contents_file} "{\n") math (EXPR level "${level} + 1") indent () file (APPEND ${contents_file} "\"type\": \"file\",\n") indent () file (APPEND ${contents_file} "\"name\": \"${name}\"\n") math (EXPR level "${level} - 1") indent () file (APPEND ${contents_file} "}") set (first 0) endforeach () if (${level} GREATER 1) end_entry () endif () file (APPEND ${contents_file} "\n]\n")