| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- # Simple CMake utility to read variables from MK files
- # - Gets contents from given file (name or path)
- # - Parses the assignment statements
- # - Makes the same assignments in the PARENT_SCOPE
- if(POLICY CMP0007)
- cmake_policy(SET CMP0007 NEW)
- endif()
- function(ParseHeader HeaderFile Prefix)
- _ParseHeader(${HeaderFile} ${Prefix})
- endfunction()
- macro(_ParseHeader HeaderFile Prefix)
- message(CHECK_START "Parsing Header")
- list(APPEND CMAKE_MESSAGE_INDENT " ")
- message(STATUS "Reading \"${HeaderFile}\"")
- file(READ "${HeaderFile}" FileContents)
- string(REGEX REPLACE "/\\*.*\\*/" "" FileContents ${FileContents})
- # replace the \ newlines with spaces
- string(REGEX REPLACE "\\\\\r?\n *" " " FileContents ${FileContents})
- # turn each line into an item in a list
- string(REGEX REPLACE "\r?\n" ";" FileLines ${FileContents})
- list(REMOVE_ITEM FileLines "")
- foreach(line ${FileLines})
- # remove comments from the ends of each line
- string(REGEX REPLACE "//.*" "" line ${line})
- # remove now-empty lines
- if("${line}" STREQUAL "")
- continue()
- endif()
- # try to process includes, if the file exists
- if(line MATCHES "^#include \"(.+)\"")
- set(INCLUDED_HEADER ${CMAKE_MATCH_1})
- if(EXISTS ${INCLUDED_HEADER})
- _ParseHeader("${INCLUDED_HEADER}" ${Prefix})
- else()
- message(STATUS "Could not read ${INCLUDED_HEADER}")
- endif()
- continue()
- endif()
-
- # array
- if(line MATCHES "#define ([A-Za-z0-9_]+) {(.*)}")
- set(VARIABLE_NAME ${CMAKE_MATCH_1})
- set(VARIABLE_VALUE ${CMAKE_MATCH_2})
- set(${Prefix}${VARIABLE_NAME} ${VARIABLE_VALUE})
- endif()
- # regular variable
- if(line MATCHES "#define ([A-Za-z0-9_]+) (.*)")
- set(VARIABLE_NAME ${CMAKE_MATCH_1})
- set(VARIABLE_VALUE ${CMAKE_MATCH_2})
- set(${Prefix}${VARIABLE_NAME} ${VARIABLE_VALUE})
- endif()
- endforeach()
- list(POP_BACK CMAKE_MESSAGE_INDENT)
- message(CHECK_PASS "Complete")
- endmacro()
|