cmake_minimum_required(VERSION 3.20) ## ## @brief List all folder in a specific inout folder. ## @param[out] VAR_OUT Result list of folders. ## @param[in] BASE_FOLDER Basic folder to parse. ## function(sub_dir_list VAR_OUT BASE_FOLDER) #message(" Search: ${BASE_FOLDER}" ) file(GLOB CHILDREN "${BASE_FOLDER}/*") #message(" ==>>> ${children}" ) set(OUT_DATA "") foreach(CHILD ${CHILDREN}) #message(" - ${child}" ) if(IS_DIRECTORY ${CHILD}) #message(" ==> is directory" ) list(APPEND OUT_DATA ${CHILD}) endif() endforeach() set(${VAR_OUT} ${OUT_DATA} PARENT_SCOPE) endfunction() function(replace_base_path VAR_OUT BASE LIST_ELEMENT) set(OUT_DATA "") foreach(ELEM ${LIST_ELEMENT}) string(REPLACE "${BASE}" "" TMP_VARIABLE ${ELEM}) list(APPEND OUT_DATA ${TMP_VARIABLE}) endforeach() set(${VAR_OUT} ${OUT_DATA} PARENT_SCOPE) endfunction() function(copy_file_with_reference BASE_PATH SRC DST) #check if input function if compatible with changing folder model... string(FIND "${SRC}" "!" POSITION_IN_FILE REVERSE) #message("POSITION_IN_FILE=${POSITION_IN_FILE}") if(${POSITION_IN_FILE} GREATER 0) string(SUBSTRING "${SRC}" 0 ${POSITION_IN_FILE} FILE_NAME) MATH(EXPR POSITION_IN_FILE "${POSITION_IN_FILE}+1") string(SUBSTRING "${SRC}" ${POSITION_IN_FILE} -1 PART_2) string(FIND "${PART_2}" ":" POSITION_IN_FILE REVERSE) string(SUBSTRING "${PART_2}" 0 ${POSITION_IN_FILE} FOLDER_SRC) MATH(EXPR POSITION_IN_FILE "${POSITION_IN_FILE}+1") string(SUBSTRING "${PART_2}" ${POSITION_IN_FILE} -1 FOLDER_DST) #message("***********************************************************************") #message("FILE_NAME=${FILE_NAME}") #message("FOLDER_SRC=${FOLDER_SRC}") #message("FOLDER_DST=${FOLDER_DST}") configure_file(${BASE_PATH}/${FOLDER_SRC}/${FILE_NAME} ${DST}/${FOLDER_DST}/${FILE_NAME} COPYONLY) else() configure_file(${BASE_PATH}/${SRC} ${DST}/${SRC} COPYONLY) endif() endfunction() ## ## @brief Recursive search of a specific patter (stop whan find the pattern in a folder. ## (have a limit of parsing ==> optimise resarch in a worktree). ## @param[out] VAR_OUT List of all files that corespond of the reg-exp ## @param[in] BASE_FOLDER Basic folder to parse. ## @param[in] REG_EXP Regular expression to search the data. ## @param[in] LIMIT Lismit of folder to recursively parse. ## function(find_all_files VAR_OUT BASE_FOLDER REG_EXP LIMIT) if (${LIMIT} LESS_EQUAL 0) set(${VAR_OUT} "" PARENT_SCOPE) return() endif() MATH(EXPR LIMIT "${LIMIT}-1") get_filename_component(BASE_FOLDER ${BASE_FOLDER} ABSOLUTE) #message("KK Search in subDiratory: ${BASE_FOLDER}/${REG_EXP}" ) file(GLOB TMP_FILES "${BASE_FOLDER}/${REG_EXP}") #message("-end-" ) set(GLD_FILES "") #message("Find file: '${GLD_FILES}'" ) foreach(ELEM ${TMP_FILES}) if(IS_DIRECTORY "${ELEM}") get_filename_component(DIR_NAME_RELATIVE ${ELEM} NAME) #message(" =!=> DIR_NAME_RELATIVE = ${DIR_NAME_RELATIVE}" ) if("${ELEM}" STREQUAL "${BASE_FOLDER}" OR "${ELEM}" STREQUAL "${BASE_FOLDER}/" OR "${ELEM}" STREQUAL ".") continue() endif() #message(" element: ${ELEM}" ) #message(" BASE_FOLDER: ${BASE_FOLDER}" ) find_all_files(OUT_SUB_LIST "${ELEM}" "${REG_EXP}" ${LIMIT}) #message(" start Add 1" ) list(APPEND GLD_FILES ${OUT_SUB_LIST}) #message(" -end-" ) else() #message(" start Add 2" ) list(APPEND GLD_FILES ${ELEM}) #message(" -end-" ) endif() endforeach() set(${VAR_OUT} ${GLD_FILES} PARENT_SCOPE) endfunction() function(find_all_files_exeption VAR_OUT BASE_FOLDER REG_EXP LIMIT) if (${LIMIT} LESS_EQUAL 0) set(${VAR_OUT} "" PARENT_SCOPE) return() endif() MATH(EXPR LIMIT "${LIMIT}-1") get_filename_component(BASE_FOLDER ${BASE_FOLDER} ABSOLUTE) #message("KK Search in subDiratory: ${BASE_FOLDER}/${REG_EXP}" ) file(GLOB GLD_FILES "${BASE_FOLDER}/${REG_EXP}") #message("Find file: '${GLD_FILES}'" ) if("${GLD_FILES}" STREQUAL "") #message("Search in subDiratory: ${BASE_FOLDER}" ) # no element continue search... set(SUBDIRS "") sub_dir_list(SUBDIRS "${BASE_FOLDER}") #message(" =!=> : ${SUBDIRS}" ) foreach(ELEM ${SUBDIRS}) get_filename_component(DIR_NAME_RELATIVE ${ELEM} NAME) #message(" =!=> DIR_NAME_RELATIVE = ${DIR_NAME_RELATIVE}" ) if("${DIR_NAME_RELATIVE}" STREQUAL ".git" OR "${DIR_NAME_RELATIVE}" STREQUAL ".island" OR "${DIR_NAME_RELATIVE}" STREQUAL "archive" OR "${DIR_NAME_RELATIVE}" STREQUAL "out" OR "${DIR_NAME_RELATIVE}" STREQUAL "target" OR "${DIR_NAME_RELATIVE}" STREQUAL "lutin") continue() endif() if("${ELEM}" STREQUAL "${BASE_FOLDER}" OR "${ELEM}" STREQUAL "${BASE_FOLDER}/") continue() endif() #message(" element: ${ELEM}" ) #message(" BASE_FOLDER: ${BASE_FOLDER}" ) find_all_files_exeption(OUT_SUB_LIST "${ELEM}" "${REG_EXP}" ${LIMIT}) list(APPEND GLD_FILES ${OUT_SUB_LIST}) endforeach() endif() set(${VAR_OUT} ${GLD_FILES} PARENT_SCOPE) endfunction()