Skip to content

Commit

Permalink
Better window title and git version detection
Browse files Browse the repository at this point in the history
  • Loading branch information
MatusGuy committed Nov 29, 2024
1 parent 4106352 commit 03dbdb0
Show file tree
Hide file tree
Showing 6 changed files with 65 additions and 214 deletions.
7 changes: 4 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -244,12 +244,13 @@ if(NOT EMSCRIPTEN)
# SDL2 main (windows?)
$<TARGET_NAME_IF_EXISTS:SDL2::SDL2main>
# SDL2
SDL2)
SDL2
)
target_link_libraries(supertux2 PUBLIC
Ogg
Vorbis
VorbisFile
)
)
target_link_libraries(supertux2 PUBLIC CURL::libcurl)
endif()

Expand All @@ -265,7 +266,7 @@ endif()
include(SuperTux/BuildInstall)

## Create config.h now that INSTALL_SUBDIR_* have been set.
configure_file(config.h.cmake ${CMAKE_BINARY_DIR}/config.h )
configure_file(config.h.in ${CMAKE_BINARY_DIR}/config.h)

## Build tests
if(BUILD_TESTING)
Expand Down
171 changes: 55 additions & 116 deletions mk/cmake/GetGitRevisionDescription.cmake
Original file line number Diff line number Diff line change
@@ -1,130 +1,69 @@
# - Returns a version string from Git
#
# These functions force a re-configure on each git commit so that you can
# trust the values of the variables in your build system.
# SuperTux
# Copyright (C) 2024 MatusGuy <matusguy@supertuxproject.org>
#
# get_git_head_revision(<refspecvar> <hashvar> [<additional arguments to git describe> ...])
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# Returns the refspec and sha hash of the current head revision
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# git_describe(<var> [<additional arguments to git describe> ...])
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# Returns the results of git describe on the source tree, and adjusting
# the output so that it tests false if an error occurs.
#
# git_get_exact_tag(<var> [<additional arguments to git describe> ...])
#
# Returns the results of git describe --exact-match on the source tree,
# and adjusting the output so that it tests false if there was no exact
# matching tag.
#
# Requires CMake 2.6 or newer (uses the 'function' command)
#
# Original Author:
# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
# http://academic.cleardefinition.com
# Iowa State University HCI Graduate Program/VRAC
#
# Copyright Iowa State University 2009-2010.
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)

if(__get_git_revision_description)
return()
endif()
set(__get_git_revision_description YES)

# We must run the following at "include" time, not at function call time,
# to find the path to this module rather than the path to a calling list file
get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)

function(get_git_head_revision _refspecvar _hashvar)
set(GIT_PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set(GIT_DIR "${GIT_PARENT_DIR}/.git")
while(NOT EXISTS "${GIT_DIR}") # .git dir not found, search parent directories
set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}")
get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH)
if(GIT_PARENT_DIR STREQUAL GIT_PREVIOUS_PARENT)
# We have reached the root directory, we are not in git
set(${_refspecvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
set(${_hashvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
return()
endif()
set(GIT_DIR "${GIT_PARENT_DIR}/.git")
endwhile()
# check if this is a submodule
if(NOT IS_DIRECTORY ${GIT_DIR})
file(READ ${GIT_DIR} submodule)
string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" GIT_DIR_RELATIVE ${submodule})
get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)
get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE} ABSOLUTE)
endif()
set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data")
if(NOT EXISTS "${GIT_DATA}")
file(MAKE_DIRECTORY "${GIT_DATA}")
endif()

if(NOT EXISTS "${GIT_DIR}/HEAD")
return()
endif()
set(HEAD_FILE "${GIT_DATA}/HEAD")
configure_file("${GIT_DIR}/HEAD" "${HEAD_FILE}" COPYONLY)
find_package(Git QUIET)

configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in"
"${GIT_DATA}/grabRef.cmake"
@ONLY)
include("${GIT_DATA}/grabRef.cmake")
macro(git_run)
cmake_parse_arguments(GIT_RUN "" "RESULT;OUTPUT" "COMMAND" ${ARGN})

set(${_refspecvar} "${HEAD_REF}" PARENT_SCOPE)
set(${_hashvar} "${HEAD_HASH}" PARENT_SCOPE)
endfunction()
if(NOT GIT_FOUND)
set(${GIT_RUN_OUTPUT} ${GIT_RUN_OUTPUT}-NOTFOUND)
# Can't use a return command here because... Macro.
else()
execute_process(COMMAND ${GIT_EXECUTABLE} ${GIT_RUN_COMMAND}
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
RESULT_VARIABLE ${GIT_RUN_RESULT}
OUTPUT_VARIABLE ${GIT_RUN_OUTPUT})

function(git_describe _var)
if(NOT GIT_FOUND)
find_package(Git QUIET)
endif()
get_git_head_revision(refspec hash)
if(NOT GIT_FOUND)
set(${_var} "GIT-NOTFOUND" PARENT_SCOPE)
return()
endif()
if(NOT hash)
set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE)
return()
endif()
if(${${GIT_RUN_RESULT}} EQUAL 0)
string(REPLACE "\n" "" ${GIT_RUN_OUTPUT} "${${GIT_RUN_OUTPUT}}")
else()
message(STATUS "\"${GIT_EXECUTABLE} ${GIT_RUN_COMMAND}\" failed with result \"${${GIT_RUN_RESULT}}\".")
set(${GIT_RUN_OUTPUT} ${GIT_RUN_OUTPUT}-NOTFOUND)
endif()
endif()
endmacro()

# TODO sanitize
#if((${ARGN}" MATCHES "&&") OR
# (ARGN MATCHES "||") OR
# (ARGN MATCHES "\\;"))
# message("Please report the following error to the project!")
# message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}")
#endif()
macro(git_project_version out is_release)
if(NOT GIT_FOUND OR NOT EXISTS "${PROJECT_SOURCE_DIR}/.git")
set(${out} ${out}-NOTFOUND)
set(${is_release} NO)
# Can't use a return command here because... Macro.
else()
# Tag
git_run(COMMAND describe --tags --abbrev=0 OUTPUT _tag RESULT _result)

#message(STATUS "Arguments to execute_process: ${ARGN}")
# Commits since tag
git_run(COMMAND rev-list ${_tag}..HEAD --count OUTPUT _tagn RESULT _result)

execute_process(COMMAND
"${GIT_EXECUTABLE}"
describe
${hash}
${ARGN}
WORKING_DIRECTORY
"${CMAKE_CURRENT_SOURCE_DIR}"
RESULT_VARIABLE
res
OUTPUT_VARIABLE
out
# ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT res EQUAL 0)
set(out "${out}-${res}-NOTFOUND")
endif()
if(_tagn STREQUAL "0")
set(${is_release} YES)
set(${out} "${_tag}")
else()
# Commit hash
git_run(COMMAND rev-parse --short HEAD OUTPUT _hash RESULT _result)

set(${_var} "${out}" PARENT_SCOPE)
endfunction()
# Branch
git_run(COMMAND rev-parse --abbrev-ref HEAD OUTPUT _branch RESULT _result)

function(git_get_exact_tag _var)
git_describe(out --exact-match ${ARGN})
set(${_var} "${out}" PARENT_SCOPE)
endfunction()
set(${is_release} NO)
set(${out} "${_tag} (${_tagn}) - ${_hash} (${_branch})")
endif()
endif()
endmacro()
41 changes: 0 additions & 41 deletions mk/cmake/GetGitRevisionDescription.cmake.in

This file was deleted.

51 changes: 5 additions & 46 deletions mk/cmake/SuperTux/BuildVersion.cmake
Original file line number Diff line number Diff line change
@@ -1,53 +1,12 @@
if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
## Find revision of WC
mark_as_advanced(GIT_EXECUTABLE)
find_program(GIT_EXECUTABLE git)
if(NOT GIT_EXECUTABLE EQUAL "GIT_EXECUTABLE-NOTFOUND")
include(GetGitRevisionDescription)
git_describe(VERSION_STRING_GIT "--tags" "--match" "?[0-9]*.[0-9]*.[0-9]*")
string(REPLACE "v" "" VERSION_LIST ${VERSION_STRING_GIT})
string(REGEX REPLACE "[^\\-]+\\-([0-9]+)\\-.*" "\\1" VERSION_NUMBER_GIT "${VERSION_LIST}")
string(REGEX REPLACE "(-|_|\\.)" ";" VERSION_LIST ";${VERSION_LIST}")
endif()
endif()

get_filename_component(BASEDIR ${CMAKE_SOURCE_DIR} NAME)
if("${VERSION_LIST}" STREQUAL "")
if(${BASEDIR} MATCHES "supertux2-[0-9\\.]*")
string(REGEX REPLACE "(\\.|_|-)" ";" VERSION_LIST ${BASEDIR})
endif()
endif()

file(GLOB ORIG_TGZ ../*.orig.tar.gz)
if("${VERSION_LIST}" STREQUAL "" AND (NOT "${ORIG_TGZ}" STREQUAL ""))
get_filename_component(BASEDIR ${ORIG_TGZ} NAME)
string(REGEX REPLACE "(\\.|_|-)" ";" VERSION_LIST ${BASEDIR})
endif()
include(GetGitRevisionDescription)

list(LENGTH VERSION_LIST VERSION_LIST_SIZE)

if(${VERSION_LIST_SIZE} GREATER 0)
list(GET VERSION_LIST 1 MAJOR_VERSION_GIT)
list(GET VERSION_LIST 2 MINOR_VERSION_GIT)
list(GET VERSION_LIST 3 PATCH_VERSION_GIT)

if("${VERSION_STRING_GIT}" STREQUAL "")
set(VERSION_STRING_GIT "${MAJOR_VERSION_GIT}.${MINOR_VERSION_GIT}.${PATCH_VERSION_GIT}")
endif()

configure_file("${CMAKE_SOURCE_DIR}/version.cmake.in" "${CMAKE_SOURCE_DIR}/version.cmake")
endif()
if(NOT EXISTS "${CMAKE_SOURCE_DIR}/version.cmake")
message( SEND_ERROR "Could not find GIT or valid version.cmake. Version information will be invalid." )
endif()
include("${CMAKE_SOURCE_DIR}/version.cmake")
git_project_version(SUPERTUX_PACKAGE_VERSION IS_SUPERTUX_RELEASE)

if(FORCE_VERSION_STRING)
set(SUPERTUX_VERSION_STRING "${FORCE_VERSION_STRING}")
if(NOT IS_SUPERTUX_RELEASE AND SUPERTUX_PACKAGE_VERSION)
string(PREPEND SUPERTUX_PACKAGE_VERSION "dev ")
endif()
set(SUPERTUX_VERSION ${SUPERTUX_VERSION_STRING})

configure_file(version.h.in ${CMAKE_BINARY_DIR}/version.h )
configure_file(version.h.in ${CMAKE_BINARY_DIR}/version.h)

set_source_files_properties(${CMAKE_BINARY_DIR}/version.h
PROPERTIES GENERATED true)
Expand Down
6 changes: 0 additions & 6 deletions version.cmake.in

This file was deleted.

3 changes: 1 addition & 2 deletions version.h.in
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
#ifndef VERSION_H
#define VERSION_H
#define PACKAGE_VERSION "${SUPERTUX_VERSION}"
#define SUPERTUX_BUILD_NUMBER "${VERSION_NUMBER_GIT}"
#define PACKAGE_VERSION "${SUPERTUX_PACKAGE_VERSION}"
#define LOGO_FILE "${LOGO_FILE}"
#endif

0 comments on commit 03dbdb0

Please sign in to comment.