cutter/cmake/QMakeProParse.cmake

49 lines
1.3 KiB
CMake

# -------------------
# QMakeProParse.cmake
# -------------------
#
# qmake project parsing utilities
#
# parse_qmake_pro(<PRO_FILE> <PREFIX>)
#
# parse qmake .pro file PRO_FILE and set cmake variables <PREFIX>_<VAR_NAME>
# to content of variable VAR_NAME in the .pro file.
#
# supported qmake syntax:
# - VARIABLE = values
# - VARIABLE += values
#
# not (yet) supported:
# - VARIABLE -= values
# - scopes
#
function(parse_qmake_pro PRO_FILE PREFIX)
file(READ ${PRO_FILE} PRO_CONTENT)
# concatenate lines with backslashes
string(REGEX REPLACE "\\\\\ *\n" "" PRO_CONTENT "${PRO_CONTENT}")
# separate lines
string(REGEX MATCHALL "[^\n]+(\n|$)" PRO_LINES "${PRO_CONTENT}")
foreach(LINE IN LISTS PRO_LINES)
string(STRIP "${LINE}" LINE)
# VARIABLE = some values ...
string(REGEX MATCH "^([a-zA-Z_]+)\ *=(.*)" VAR_SET "${LINE}")
if(CMAKE_MATCH_1)
separate_arguments(VALUES UNIX_COMMAND ${CMAKE_MATCH_2})
set(${PREFIX}_${CMAKE_MATCH_1} "${VALUES}" PARENT_SCOPE)
endif()
# VARIABLE += some values ...
string(REGEX MATCH "^([a-zA-Z_]+)\ *\\+=(.*)" VAR_SET "${LINE}")
if(CMAKE_MATCH_1)
separate_arguments(VALUES UNIX_COMMAND ${CMAKE_MATCH_2})
set(VAR_NAME ${PREFIX}_${CMAKE_MATCH_1})
set(${VAR_NAME} "${${VAR_NAME}}" "${VALUES}" PARENT_SCOPE)
endif()
endforeach()
endfunction()