aboutsummaryrefslogtreecommitdiff
path: root/deps/raylib/cmake/ParseConfigHeader.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'deps/raylib/cmake/ParseConfigHeader.cmake')
-rw-r--r--deps/raylib/cmake/ParseConfigHeader.cmake17
1 files changed, 17 insertions, 0 deletions
diff --git a/deps/raylib/cmake/ParseConfigHeader.cmake b/deps/raylib/cmake/ParseConfigHeader.cmake
new file mode 100644
index 0000000..797eea3
--- /dev/null
+++ b/deps/raylib/cmake/ParseConfigHeader.cmake
@@ -0,0 +1,17 @@
+file(READ "${CMAKE_CURRENT_SOURCE_DIR}/src/config.h" CONFIG_HEADER_CONTENT)
+
+set(BLANK_OR_BACKSLASH_PATTERN "[ \t\r\n\\]")
+set(VALID_IDENTIFIER_PATTERN "[A-Za-z_]+[A-Za-z_0-9]*")
+set(VALID_VALUE_PATTERN [=["?[A-Za-z_0-9.-]+"?]=]) # not really correct but does the job since the config.h file hopefully will have been checked by a C preprocessor.
+set(MACRO_REGEX "(//${BLANK_OR_BACKSLASH_PATTERN}*)?\#define${BLANK_OR_BACKSLASH_PATTERN}+(${VALID_IDENTIFIER_PATTERN})${BLANK_OR_BACKSLASH_PATTERN}+(${VALID_VALUE_PATTERN})")
+
+string(REGEX MATCHALL ${MACRO_REGEX} MACRO_LIST ${CONFIG_HEADER_CONTENT})
+
+set(CONFIG_HEADER_FLAGS ${MACRO_LIST})
+list(FILTER CONFIG_HEADER_FLAGS INCLUDE REGEX "^.+SUPPORT_")
+list(TRANSFORM CONFIG_HEADER_FLAGS REPLACE ${MACRO_REGEX} [[\2=OFF]] REGEX "^//")
+list(TRANSFORM CONFIG_HEADER_FLAGS REPLACE ${MACRO_REGEX} [[\2=ON]])
+
+set(CONFIG_HEADER_VALUES ${MACRO_LIST})
+list(FILTER CONFIG_HEADER_VALUES EXCLUDE REGEX "(^.+SUPPORT_)|(^//)")
+list(TRANSFORM CONFIG_HEADER_VALUES REPLACE ${MACRO_REGEX} [[\2=\3]])