Files
TIC-80/cmake/runtime_versions.cmake

132 lines
6.9 KiB
CMake

set(TIC_RT_LUA "unknown")
set(TIC_RT_RUBY "unknown")
set(TIC_RT_JS "unknown")
set(TIC_RT_MOON "unknown")
set(TIC_RT_YUE "unknown")
set(TIC_RT_FENNEL "unknown")
set(TIC_RT_SCHEME "unknown")
set(TIC_RT_SQUIRREL "unknown")
set(TIC_RT_WREN "unknown")
set(TIC_RT_WASM "unknown")
set(TIC_RT_JANET "unknown")
set(TIC_RT_PYTHON "unknown")
if(EXISTS "${CMAKE_SOURCE_DIR}/vendor/lua/lua.h")
file(STRINGS "${CMAKE_SOURCE_DIR}/vendor/lua/lua.h" LUA_VERSION_MAJOR_LINE REGEX "^#define LUA_VERSION_MAJOR[ \t]+\"[^\"]+\"")
file(STRINGS "${CMAKE_SOURCE_DIR}/vendor/lua/lua.h" LUA_VERSION_MINOR_LINE REGEX "^#define LUA_VERSION_MINOR[ \t]+\"[^\"]+\"")
file(STRINGS "${CMAKE_SOURCE_DIR}/vendor/lua/lua.h" LUA_VERSION_RELEASE_LINE REGEX "^#define LUA_VERSION_RELEASE[ \t]+\"[^\"]+\"")
if(LUA_VERSION_MAJOR_LINE AND LUA_VERSION_MINOR_LINE AND LUA_VERSION_RELEASE_LINE)
string(REGEX REPLACE ".*\"([^\"]+)\".*" "\\1" LUA_VERSION_MAJOR "${LUA_VERSION_MAJOR_LINE}")
string(REGEX REPLACE ".*\"([^\"]+)\".*" "\\1" LUA_VERSION_MINOR "${LUA_VERSION_MINOR_LINE}")
string(REGEX REPLACE ".*\"([^\"]+)\".*" "\\1" LUA_VERSION_RELEASE "${LUA_VERSION_RELEASE_LINE}")
set(TIC_RT_LUA "Lua ${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}.${LUA_VERSION_RELEASE}")
endif()
endif()
if(EXISTS "${CMAKE_SOURCE_DIR}/vendor/mruby/include/mruby/version.h")
file(STRINGS "${CMAKE_SOURCE_DIR}/vendor/mruby/include/mruby/version.h" MRUBY_RELEASE_MAJOR_LINE REGEX "^#define MRUBY_RELEASE_MAJOR[ \t]+[0-9]+")
file(STRINGS "${CMAKE_SOURCE_DIR}/vendor/mruby/include/mruby/version.h" MRUBY_RELEASE_MINOR_LINE REGEX "^#define MRUBY_RELEASE_MINOR[ \t]+[0-9]+")
file(STRINGS "${CMAKE_SOURCE_DIR}/vendor/mruby/include/mruby/version.h" MRUBY_RELEASE_TEENY_LINE REGEX "^#define MRUBY_RELEASE_TEENY[ \t]+[0-9]+")
file(STRINGS "${CMAKE_SOURCE_DIR}/vendor/mruby/include/mruby/version.h" MRUBY_RUBY_VERSION_LINE REGEX "^#define MRUBY_RUBY_VERSION[ \t]+.*")
if(MRUBY_RELEASE_MAJOR_LINE AND MRUBY_RELEASE_MINOR_LINE AND MRUBY_RELEASE_TEENY_LINE AND MRUBY_RUBY_VERSION_LINE)
string(REGEX REPLACE "^#define MRUBY_RELEASE_MAJOR[ \t]+([0-9]+).*" "\\1" MRUBY_RELEASE_MAJOR "${MRUBY_RELEASE_MAJOR_LINE}")
string(REGEX REPLACE "^#define MRUBY_RELEASE_MINOR[ \t]+([0-9]+).*" "\\1" MRUBY_RELEASE_MINOR "${MRUBY_RELEASE_MINOR_LINE}")
string(REGEX REPLACE "^#define MRUBY_RELEASE_TEENY[ \t]+([0-9]+).*" "\\1" MRUBY_RELEASE_TEENY "${MRUBY_RELEASE_TEENY_LINE}")
string(REGEX REPLACE ".*\"([^\"]+)\".*" "\\1" MRUBY_RUBY_VERSION "${MRUBY_RUBY_VERSION_LINE}")
set(MRUBY_VERSION "${MRUBY_RELEASE_MAJOR}.${MRUBY_RELEASE_MINOR}.${MRUBY_RELEASE_TEENY}")
set(TIC_RT_RUBY "mruby ${MRUBY_VERSION} (Ruby ${MRUBY_RUBY_VERSION})")
endif()
endif()
if(EXISTS "${CMAKE_SOURCE_DIR}/vendor/quickjs/VERSION")
file(STRINGS "${CMAKE_SOURCE_DIR}/vendor/quickjs/VERSION" QUICKJS_VERSION_LINE LIMIT_COUNT 1)
if(QUICKJS_VERSION_LINE)
set(TIC_RT_JS "QuickJS ${QUICKJS_VERSION_LINE}")
endif()
endif()
if(EXISTS "${CMAKE_SOURCE_DIR}/vendor/moonscript/README.txt")
file(STRINGS "${CMAKE_SOURCE_DIR}/vendor/moonscript/README.txt" MOON_VERSION_LINE REGEX "^MoonScript[ \t]+[0-9]+\\.[0-9]+\\.[0-9]+")
if(MOON_VERSION_LINE)
string(REGEX REPLACE "^MoonScript[ \t]+([0-9]+\\.[0-9]+\\.[0-9]+).*" "\\1" MOON_VERSION "${MOON_VERSION_LINE}")
set(TIC_RT_MOON "MoonScript ${MOON_VERSION} (${TIC_RT_LUA})")
endif()
endif()
if(EXISTS "${CMAKE_SOURCE_DIR}/vendor/yuescript/src/yuescript/yue_compiler.cpp")
file(STRINGS "${CMAKE_SOURCE_DIR}/vendor/yuescript/src/yuescript/yue_compiler.cpp" YUE_VERSION_LINE REGEX "^const std::string_view version = \"[0-9]+\\.[0-9]+\\.[0-9]+\"sv;")
if(YUE_VERSION_LINE)
string(REGEX REPLACE ".*\"([0-9]+\\.[0-9]+\\.[0-9]+)\".*" "\\1" YUE_VERSION "${YUE_VERSION_LINE}")
set(TIC_RT_YUE "YueScript ${YUE_VERSION}")
endif()
endif()
if(EXISTS "${CMAKE_SOURCE_DIR}/vendor/fennel/fennel.lua")
file(STRINGS "${CMAKE_SOURCE_DIR}/vendor/fennel/fennel.lua" FENNEL_VERSION_LINE REGEX "^[ \t]*local version = \"[0-9]+\\.[0-9]+\\.[0-9]+\"")
if(FENNEL_VERSION_LINE)
string(REGEX REPLACE ".*\"([0-9]+\\.[0-9]+\\.[0-9]+)\".*" "\\1" FENNEL_VERSION "${FENNEL_VERSION_LINE}")
set(TIC_RT_FENNEL "Fennel ${FENNEL_VERSION} (${TIC_RT_LUA})")
endif()
endif()
if(EXISTS "${CMAKE_SOURCE_DIR}/vendor/s7/s7.h")
file(STRINGS "${CMAKE_SOURCE_DIR}/vendor/s7/s7.h" S7_VERSION_LINE REGEX "^#define S7_VERSION \"[^\"]+\"")
if(S7_VERSION_LINE)
string(REGEX REPLACE ".*\"([^\"]+)\".*" "\\1" S7_VERSION "${S7_VERSION_LINE}")
set(TIC_RT_SCHEME "s7 ${S7_VERSION}")
endif()
endif()
if(EXISTS "${CMAKE_SOURCE_DIR}/vendor/squirrel/include/squirrel.h")
file(STRINGS "${CMAKE_SOURCE_DIR}/vendor/squirrel/include/squirrel.h" SQUIRREL_VERSION_LINE REGEX "^#define SQUIRREL_VERSION[ \t]+.*")
if(SQUIRREL_VERSION_LINE)
string(REGEX REPLACE ".*\"([^\"]+)\".*" "\\1" SQUIRREL_VERSION "${SQUIRREL_VERSION_LINE}")
set(TIC_RT_SQUIRREL "${SQUIRREL_VERSION}")
endif()
endif()
if(EXISTS "${CMAKE_SOURCE_DIR}/vendor/wren/src/include/wren.h")
file(STRINGS "${CMAKE_SOURCE_DIR}/vendor/wren/src/include/wren.h" WREN_VERSION_LINE REGEX "^#define WREN_VERSION_STRING \"[^\"]+\"")
if(WREN_VERSION_LINE)
string(REGEX REPLACE ".*\"([^\"]+)\".*" "\\1" WREN_VERSION "${WREN_VERSION_LINE}")
set(TIC_RT_WREN "Wren ${WREN_VERSION}")
endif()
endif()
if(EXISTS "${CMAKE_SOURCE_DIR}/vendor/wasm3/source/wasm3.h")
file(STRINGS "${CMAKE_SOURCE_DIR}/vendor/wasm3/source/wasm3.h" WASM_VERSION_LINE REGEX "^#define M3_VERSION[ \t]+\"[^\"]+\"")
if(WASM_VERSION_LINE)
string(REGEX REPLACE ".*\"([^\"]+)\".*" "\\1" WASM_VERSION "${WASM_VERSION_LINE}")
set(TIC_RT_WASM "wasm3 ${WASM_VERSION}")
endif()
endif()
if(EXISTS "${CMAKE_SOURCE_DIR}/build/janet/janetconf.h")
file(STRINGS "${CMAKE_SOURCE_DIR}/build/janet/janetconf.h" JANET_VERSION_LINE REGEX "^#define JANET_VERSION \"[^\"]+\"")
elseif(EXISTS "${CMAKE_SOURCE_DIR}/vendor/janet/src/include/janet.h")
file(STRINGS "${CMAKE_SOURCE_DIR}/vendor/janet/src/include/janet.h" JANET_VERSION_LINE REGEX "^#define JANET_VERSION \"[^\"]+\"")
endif()
if(JANET_VERSION_LINE)
string(REGEX REPLACE ".*\"([^\"]+)\".*" "\\1" JANET_VERSION "${JANET_VERSION_LINE}")
if(NOT JANET_VERSION STREQUAL "latest")
set(TIC_RT_JANET "Janet ${JANET_VERSION}")
endif()
endif()
if(EXISTS "${CMAKE_SOURCE_DIR}/vendor/pocketpy/include/pocketpy/config.h")
file(STRINGS "${CMAKE_SOURCE_DIR}/vendor/pocketpy/include/pocketpy/config.h" PYTHON_VERSION_LINE REGEX "^#define PK_VERSION[ \t]+\"[^\"]+\"")
if(PYTHON_VERSION_LINE)
string(REGEX REPLACE ".*\"([^\"]+)\".*" "\\1" PYTHON_VERSION "${PYTHON_VERSION_LINE}")
set(TIC_RT_PYTHON "pocketpy ${PYTHON_VERSION}")
endif()
endif()
configure_file(
"${CMAKE_SOURCE_DIR}/cmake/runtime_versions.h.in"
"${CMAKE_CURRENT_BINARY_DIR}/runtime_versions.h"
@ONLY
)