Hash :
2dc788cb
        
        Author :
  
        
        Date :
2022-10-20T19:54:24
        
      
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>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
#!/bin/sh
#
# Print the current source revision, if available
SDL_ROOT=$(dirname $0)/..
cd $SDL_ROOT
if [ -e ./VERSION ]; then
    cat ./VERSION
    exit 0
fi
major=$(sed -ne 's/^#define SDL_MAJOR_VERSION  *//p' include/SDL_version.h)
minor=$(sed -ne 's/^#define SDL_MINOR_VERSION  *//p' include/SDL_version.h)
micro=$(sed -ne 's/^#define SDL_PATCHLEVEL  *//p' include/SDL_version.h)
version="${major}.${minor}.${micro}"
if [ -x "$(command -v git)" ]; then
    rev="$(git describe --tags --long 2>/dev/null)"
    if [ -n "$rev" ]; then
        # e.g. release-2.24.0-542-g96361fc47
        # or release-2.24.1-5-g36b987dab
        # or prerelease-2.23.2-0-gcb46e1b3f
        echo "$rev"
        exit 0
    fi
    rev="$(git describe --always --tags --long 2>/dev/null)"
    if [ -n "$rev" ]; then
        # Just a truncated sha1, e.g. 96361fc47.
        # Turn it into e.g. 2.25.0-g96361fc47
        echo "${version}-g${rev}"
        exit 0
    fi
fi
if [ -x "$(command -v p4)" ]; then
    rev="$(p4 changes -m1 ./...\#have 2>/dev/null| awk '{print $2}')"
    if [ $? = 0 ]; then
        # e.g. 2.25.0-p7511446
        echo "${version}-p${rev}"
        exit 0
    fi
fi
# best we can do
echo "${version}-no-vcs"
exit 0