45 lines
967 B
CMake
45 lines
967 B
CMake
# Interface for iterating over a text file by line.
|
|
#
|
|
# Example usage:
|
|
#
|
|
# fi_open_file(${some_file})
|
|
#
|
|
# while(NOT fi_done)
|
|
# fi_get_next_line()
|
|
#
|
|
# message(STATUS "read line: ${fi_line}")
|
|
# endwhile()
|
|
|
|
macro(fi_check_done)
|
|
string(LENGTH "${fi_file_contents}" len)
|
|
|
|
set(fi_done FALSE PARENT_SCOPE)
|
|
|
|
if(len EQUAL 0)
|
|
set(fi_done TRUE PARENT_SCOPE)
|
|
endif()
|
|
endmacro()
|
|
|
|
function(fi_open_file file)
|
|
file(READ "${file}" fi_file_contents)
|
|
|
|
set(fi_file_contents "${fi_file_contents}" PARENT_SCOPE)
|
|
|
|
fi_check_done()
|
|
endfunction()
|
|
|
|
function(fi_get_next_line)
|
|
string(FIND "${fi_file_contents}" "\n" pos)
|
|
|
|
string(SUBSTRING "${fi_file_contents}" 0 ${pos} fi_line)
|
|
|
|
math(EXPR pos "${pos} + 1")
|
|
|
|
string(SUBSTRING "${fi_file_contents}" ${pos} -1 fi_file_contents)
|
|
|
|
fi_check_done()
|
|
|
|
set(fi_line "${fi_line}" PARENT_SCOPE)
|
|
set(fi_file_contents "${fi_file_contents}" PARENT_SCOPE)
|
|
endfunction()
|