function(merge_parser CL_SRC_DIR OUT_FILE_NAME)
message(STATUS "Merge parser from ${CL_SRC_DIR} to ${OUT_FILE_NAME}")
set(MAX_TIMESTAMP "000000000000.00")
if(NOT EXISTS ${CL_SRC_DIR})
return()
endif()
if(DEFINED MSLITE_COMPILE_TWICE AND NOT MSLITE_COMPILE_TWICE)
return()
endif()
file(GLOB_RECURSE CL_LIST ${CL_SRC_DIR}/*.cc)
list(SORT CL_LIST)
set(out_file ${OUT_FILE_NAME})
file(REMOVE ${out_file})
file(WRITE ${out_file} "")
foreach(file_path ${CL_LIST})
file(TIMESTAMP ${file_path} CUR_TIMESTAMP "%Y%m%d%H%M.%S")
string(COMPARE GREATER ${CUR_TIMESTAMP} ${MAX_TIMESTAMP} IS_GREATER)
if(IS_GREATER)
set(MAX_TIMESTAMP ${CUR_TIMESTAMP})
endif()
file(STRINGS ${file_path} READ_CC_CONTEXT NEWLINE_CONSUME NO_HEX_CONVERSION)
file(APPEND ${out_file} ${READ_CC_CONTEXT})
endforeach()
execute_process(COMMAND touch -c -t ${MAX_TIMESTAMP} ${OUT_FILE_NAME})
endfunction()
function(merge_files SRC_DIR OUT_FILE_FOLDER OUT_FILE_PREFIX EXCLUDE_FILES_PATTERN)
message(STATUS "[merge_files] From ${SRC_DIR} to ${OUT_FILE_NAME}, exclude files: ${EXCLUDE_FILES_PATTERN}")
set(MAX_TIMESTAMP "000000000000.00")
set(MAX_MERGE_FILE_NUM 200)
file(GLOB_RECURSE SRC_LIST ${SRC_DIR}/*.cc)
list(SORT SRC_LIST)
set(OUT_FILES "")
file(GLOB OUT_FILES ${OUT_FILE_FOLDER}/${OUT_FILE_PREFIX}*.cc)
if(NOT ("${OUT_FILES}" STREQUAL ""))
file(REMOVE ${OUT_FILES})
endif()
set(FILE_CNT 0)
set(GENERATE_FILE_NUM 0)
set(OUT_FILE ${OUT_FILE_FOLDER}/${OUT_FILE_PREFIX}_${GENERATE_FILE_NUM}.cc)
foreach(file_path ${SRC_LIST})
if(EXISTS ${EXCLUDE_FILES_PATTERN})
string(REGEX REPLACE ${EXCLUDE_FILES_PATTERN} "" file_path ${file_path})
endif()
if(EXISTS ${file_path})
file(TIMESTAMP ${file_path} CUR_TIMESTAMP "%Y%m%d%H%M.%S")
string(COMPARE GREATER ${CUR_TIMESTAMP} ${MAX_TIMESTAMP} IS_GREATER)
if(IS_GREATER)
set(MAX_TIMESTAMP ${CUR_TIMESTAMP})
endif()
math(EXPR FILE_CNT "${FILE_CNT} + 1")
math(EXPR FILE_MOD "${FILE_CNT} % ${MAX_MERGE_FILE_NUM}")
if(${FILE_MOD} EQUAL 0)
execute_process(COMMAND touch -c -t ${MAX_TIMESTAMP} ${OUT_FILE})
math(EXPR GENERATE_FILE_NUM "${GENERATE_FILE_NUM} + 1")
set(OUT_FILE ${OUT_FILE_FOLDER}/${OUT_FILE_PREFIX}_${GENERATE_FILE_NUM}.cc)
endif()
file(STRINGS ${file_path} READ_CC_CONTEXT NEWLINE_CONSUME NO_HEX_CONVERSION)
file(APPEND ${OUT_FILE} ${READ_CC_CONTEXT})
else()
message(STATUS "[merge_files] exclude file: ${file_path}${EXCLUDE_FILES_PATTERN}")
continue()
endif()
endforeach()
endfunction()