build: Expand version info in SDL_REVISION and SDL_GetRevision()
Instead of using a URL and git sha1, this uses `git describe` to describe the version relative to the nearest previous git tag, which gives a better indication of whether this is a release, a prerelease, a slightly patched prerelease, or a long way after the last release during active development. This serves two purposes: it makes those APIs more informative, and it also puts this information into the binary in a form that is easy to screen-scrape using strings(1). For instance, if the bundled version of SDL in a game has this, we can see at a glance what version it is. It's also shorter than using the web address of the origin git repository and the full git commit sha1. Also write the computed version into a file ./VERSION in `make dist` tarballs, so that when we build from a tarball on a system that doesn't have git available, we still get the version details. For the Perforce code path in showrev.sh, output the version number followed by the Perforce revision, in a format reminiscent of `git describe` (with p instead of g to indicate Perforce). For the code path with no VCS available at all, put a suffix on the version number to indicate that this is just a guess (we can't know whether this SDL version is actually a git snapshot or has been patched locally or similar). Resolves: https://github.com/libsdl-org/SDL/issues/6418 Signed-off-by: Simon McVittie <smcv@collabora.com>
This commit is contained in:
committed by
Sam Lantinga
parent
5b8f830e34
commit
2dc788cb9f
@@ -2930,29 +2930,36 @@ listtostr(EXTRA_CFLAGS _EXTRA_CFLAGS)
|
||||
set(EXTRA_CFLAGS ${_EXTRA_CFLAGS})
|
||||
|
||||
# Compat helpers for the configuration files
|
||||
|
||||
if(EXISTS "${PROJECT_SOURCE_DIR}/VERSION")
|
||||
file(READ "${PROJECT_SOURCE_DIR}/VERSION" SDL_SOURCE_VERSION)
|
||||
endif()
|
||||
|
||||
find_package(Git)
|
||||
if(Git_FOUND)
|
||||
execute_process(COMMAND
|
||||
"${GIT_EXECUTABLE}" remote get-url origin
|
||||
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
||||
RESULT_VARIABLE GIT_URL_STATUS
|
||||
OUTPUT_VARIABLE GIT_URL
|
||||
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
|
||||
execute_process(COMMAND
|
||||
"${GIT_EXECUTABLE}" rev-list --max-count=1 HEAD~..
|
||||
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
||||
"${GIT_EXECUTABLE}" describe --always --tags --long
|
||||
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
|
||||
RESULT_VARIABLE GIT_REVISION_STATUS
|
||||
OUTPUT_VARIABLE GIT_REVISION
|
||||
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
else()
|
||||
set(GIT_REVISION_STATUS 1)
|
||||
set(GIT_REVISION "")
|
||||
endif()
|
||||
|
||||
if(GIT_URL_STATUS EQUAL 0 OR GIT_REVISION_STATUS EQUAL 0)
|
||||
set(SDL_REVISION "${GIT_URL}@${GIT_REVISION}")
|
||||
if(SDL_SOURCE_VERSION)
|
||||
set(SDL_REVISION "SDL-${SDL_SOURCE_VERSION}")
|
||||
elseif(GIT_REVISION_STATUS EQUAL 0)
|
||||
if(GIT_REVISION MATCHES "^[0-9a-f]+$")
|
||||
# Just a truncated sha1, so prefix it with the version number
|
||||
set(SDL_REVISION "SDL-${SDL_VERSION}-g${GIT_REVISION}")
|
||||
else()
|
||||
set(SDL_REVISION "")
|
||||
# e.g. release-2.24.0-542-g96361fc47
|
||||
set(SDL_REVISION "SDL-${GIT_REVISION}")
|
||||
endif()
|
||||
else()
|
||||
set(SDL_REVISION "")
|
||||
set(SDL_REVISION "SDL-${SDL_VERSION}-no-vcs")
|
||||
endif()
|
||||
|
||||
configure_file("${SDL2_SOURCE_DIR}/include/SDL_revision.h.cmake"
|
||||
|
||||
Reference in New Issue
Block a user