Skip to content

Commit

Permalink
Allow KTX_VERSION_FULL to be manually specified (#922)
Browse files Browse the repository at this point in the history
Hello,

I would like to add ktx as a package to Alpine Linux, and one
requirement is to be able to build from a tar.gz published from
[v4.3.2](https://github.com/KhronosGroup/KTX-Software/releases/tag/v4.3.2))
but the current `cmake/version.cmake` is forcing to build from the
original git repo, while when building within [Alpine
aports](https://gitlab.alpinelinux.org/alpine/aports), we specify the
version ourselves as part of the Alpine build system (automatically from
the tar.gz downloaded).

This PR is making a small change to `cmake/version.cmake` to allow to
pass `KTX_VERSION_FULL` to cmake.
  • Loading branch information
xoofx authored Jul 24, 2024
1 parent f389108 commit 6f54c86
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 10 deletions.
6 changes: 6 additions & 0 deletions BUILDING.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,12 @@ add `-D BASISU_SUPPORT_OPENCL=ON` to the CMake configure command.
> There is very little advantage to using OpenCL in the context
> of `libktx`. It is disabled in the default build configuration.
> **Note:**
>
> When building from the `tar.gz` and not from the git repository directly, it is recommended to pass the variable `KTX_GIT_VERSION_FULL` with the associated git tag (e.g `v4.3.2`)
> ```bash
> cmake . -G Ninja -B build -DKTX_GIT_VERSION_FULL=v4.3.2
> ```
Building
--------
Expand Down
17 changes: 10 additions & 7 deletions cmake/version.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -108,16 +108,19 @@ function(generate_version _var )
set(${_var} "${KTX_VERSION}" PARENT_SCOPE)
endfunction()

# Get latest tag
git_describe_raw(KTX_VERSION_FULL --abbrev=0 --match v[0-9]*)
#message("KTX full version: ${KTX_VERSION_FULL}")
# Get latest tag from git if not passed to cmake
# This property can be passed to cmake when building from tar.gz
if(NOT KTX_GIT_VERSION_FULL)
git_describe_raw(KTX_GIT_VERSION_FULL --abbrev=0 --match v[0-9]*)
endif()
#message("KTX git full version: ${KTX_GIT_VERSION_FULL}")

# generate_version(TOKTX_VERSION tools/toktx)
# message("TOKTX_VERSION: ${TOKTX_VERSION}")

# First try a full regex ( vMAJOR.MINOR.PATCH-TWEAK )
string(REGEX MATCH "^v([0-9]*)\.([0-9]*)\.([0-9]*)(-[^\.]*)"
KTX_VERSION ${KTX_VERSION_FULL})
KTX_VERSION ${KTX_GIT_VERSION_FULL})

if(KTX_VERSION)
set(KTX_VERSION_MAJOR ${CMAKE_MATCH_1})
Expand All @@ -127,7 +130,7 @@ if(KTX_VERSION)
else()
# If full regex failed, go for vMAJOR.MINOR.PATCH
string(REGEX MATCH "^v([0-9]*)\.([0-9]*)\.([^\.]*)"
KTX_VERSION ${KTX_VERSION_FULL})
KTX_VERSION ${KTX_GIT_VERSION_FULL})

if(KTX_VERSION)
set(KTX_VERSION_MAJOR ${CMAKE_MATCH_1})
Expand Down Expand Up @@ -174,15 +177,15 @@ function( create_version_header dest_path target )
add_custom_command(
OUTPUT ${version_h_output}
# On Windows this command has to be invoked by a shell in order to work
COMMAND ${BASH_EXECUTABLE} -c "\"scripts/mkversion\" \"-o\" \"version.h\" \"${dest_path}\""
COMMAND ${BASH_EXECUTABLE} -c "\"scripts/mkversion\" \"-v\" \"${KTX_GIT_VERSION_FULL}\" \"-o\" \"version.h\" \"${dest_path}\""
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
COMMENT "Generate ${version_h_output}"
VERBATIM
)
else()
add_custom_command(
OUTPUT ${version_h_output}
COMMAND scripts/mkversion -o version.h ${dest_path}
COMMAND scripts/mkversion -v ${KTX_GIT_VERSION_FULL} -o version.h ${dest_path}
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
COMMENT "Generate ${version_h_output}"
VERBATIM
Expand Down
10 changes: 7 additions & 3 deletions scripts/mkversion
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,10 @@ function setfile() {

# Figure out the object name and write its version file.
function writeversion() {
genversion $1
# Extract version from git if it is not passed via command line
if [-z "$VN"]; then
genversion $1
fi
local vfp;
if [ -z "$1" ]; then
vfp=$VF
Expand All @@ -107,14 +110,14 @@ function writeversion() {
}

function usage() {
echo "Usage: $0 [-a] [-f] [-n] [-o <outfile>] [<object>]"
echo "Usage: $0 [-a] [-f] [-n] [-v version] [-o <outfile>] [<object>]"
exit 1
}

force=0
dry_run=0
write_all=0;
args=$(getopt afno: $*)
args=$(getopt afnv:o: $*)

set -- $args
for i; do
Expand All @@ -125,6 +128,7 @@ for i; do
shift;;
-n) dry_run=1;
shift;;
-v) VN=$2; shift; shift;;
-o) VF=$2; shift; shift;;
--) shift; break;;
esac
Expand Down

0 comments on commit 6f54c86

Please sign in to comment.