diff --git a/cmake/Skate3Version.cmake b/cmake/Skate3Version.cmake new file mode 100644 index 0000000..a1ca492 --- /dev/null +++ b/cmake/Skate3Version.cmake @@ -0,0 +1,76 @@ +function(skate3_compute_version out_var) + set(one_value FLOOR_VERSION GIT_DESCRIBE_LONG GIT_DESCRIBE_EXACT) + cmake_parse_arguments(ARG "" "${one_value}" "" ${ARGN}) + + if(NOT "${ARG_GIT_DESCRIBE_EXACT}" STREQUAL "") + if(ARG_GIT_DESCRIBE_EXACT MATCHES "^v([0-9]+\\.[0-9]+(\\.[0-9]+)?(\\.[0-9]+)?(-[0-9A-Za-z][0-9A-Za-z.-]*)?)$") + set(${out_var} "${CMAKE_MATCH_1}" PARENT_SCOPE) + return() + endif() + message(FATAL_ERROR "skate3_compute_version: unparseable exact tag '${ARG_GIT_DESCRIBE_EXACT}'") + endif() + + if("${ARG_GIT_DESCRIBE_LONG}" STREQUAL "") + message(WARNING + "skate3_compute_version: no v* tag reachable from HEAD. " + "Falling back to ${ARG_FLOOR_VERSION}-dev.unknown. " + "For CI release builds, fetch tags and build from a release tag.") + set(${out_var} "${ARG_FLOOR_VERSION}-dev.unknown" PARENT_SCOPE) + return() + endif() + + if(NOT ARG_GIT_DESCRIBE_LONG MATCHES "^v[0-9]+\\.[0-9]+(\\.[0-9]+)?(\\.[0-9]+)?(-[0-9A-Za-z][0-9A-Za-z.-]*)?-([0-9]+)-g([0-9a-f]+)$") + message(FATAL_ERROR "skate3_compute_version: unparseable describe output '${ARG_GIT_DESCRIBE_LONG}'") + endif() + + set(commit_count ${CMAKE_MATCH_6}) + set(short_sha ${CMAKE_MATCH_7}) + set(${out_var} "${ARG_FLOOR_VERSION}.${commit_count}-dev.g${short_sha}" PARENT_SCOPE) +endfunction() + +function(skate3_resolve_version out_var) + set(one_value FLOOR_VERSION SOURCE_DIR) + cmake_parse_arguments(ARG "" "${one_value}" "" ${ARGN}) + + if(NOT ARG_SOURCE_DIR) + set(ARG_SOURCE_DIR "${CMAKE_SOURCE_DIR}") + endif() + + find_program(GIT_EXECUTABLE git) + if(NOT GIT_EXECUTABLE) + skate3_compute_version(result + FLOOR_VERSION ${ARG_FLOOR_VERSION} + GIT_DESCRIBE_LONG "" + GIT_DESCRIBE_EXACT "") + set(${out_var} "${result}" PARENT_SCOPE) + return() + endif() + + execute_process( + COMMAND ${GIT_EXECUTABLE} describe --tags --exact-match --match "v[0-9]*.[0-9]*" + WORKING_DIRECTORY "${ARG_SOURCE_DIR}" + OUTPUT_VARIABLE describe_exact + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE describe_exact_rc) + if(NOT describe_exact_rc EQUAL 0) + set(describe_exact "") + endif() + + execute_process( + COMMAND ${GIT_EXECUTABLE} describe --tags --long --match "v[0-9]*.[0-9]*" + WORKING_DIRECTORY "${ARG_SOURCE_DIR}" + OUTPUT_VARIABLE describe_long + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE describe_long_rc) + if(NOT describe_long_rc EQUAL 0) + set(describe_long "") + endif() + + skate3_compute_version(result + FLOOR_VERSION ${ARG_FLOOR_VERSION} + GIT_DESCRIBE_LONG "${describe_long}" + GIT_DESCRIBE_EXACT "${describe_exact}") + set(${out_var} "${result}" PARENT_SCOPE) +endfunction() diff --git a/src/skate3_version.h.in b/src/skate3_version.h.in new file mode 100644 index 0000000..a1ee1c6 --- /dev/null +++ b/src/skate3_version.h.in @@ -0,0 +1,14 @@ +#pragma once + +// Auto-generated by CMake -- do not edit. + +#define SKATE3_VERSION_STRING "@SKATE3_FULL_VERSION@" +#define SKATE3_VERSION_NUMERIC "@SKATE3_NUMERIC_VERSION@" +#define SKATE3_BUILD_PLATFORM "@SKATE3_BUILD_PLATFORM@" +#define SKATE3_BUILD_TIMESTAMP "@SKATE3_BUILD_TIMESTAMP@" + +// Requires SKATE3_BUILD_CONFIG compile definition. +#define SKATE3_BUILD_TITLE "[v" SKATE3_VERSION_STRING "-" SKATE3_BUILD_CONFIG "]" +#define SKATE3_BUILD_STAMP \ + "build: skate3-v" SKATE3_VERSION_STRING "-" SKATE3_BUILD_PLATFORM \ + "-" SKATE3_BUILD_CONFIG "@" SKATE3_BUILD_TIMESTAMP diff --git a/third_party/rexglue-sdk b/third_party/rexglue-sdk index 9173ff4..028c1ad 160000 --- a/third_party/rexglue-sdk +++ b/third_party/rexglue-sdk @@ -1 +1 @@ -Subproject commit 9173ff4b017a178b6c2433bd925eb96d79dc764d +Subproject commit 028c1ada911f02d11d08a37ca18e9e99a1f5502e