[x265] [Patch] [Release 3.5 branch ] Fix version information reporting for x265 git archival
Aruna Matheswaran
aruna at multicorewareinc.com
Tue Dec 15 10:23:55 CET 2020
pushed
On Mon, Dec 14, 2020 at 10:03 AM Srikanth Kurapati <
srikanth.kurapati at multicorewareinc.com> wrote:
> From ba724aa39a938695b821e5f2bda1112687f3dde0 Mon Sep 17 00:00:00 2001
> From: Srikanth Kurapati <srikanth.kurapati at multicorewareinc.com>
> Date: Thu, 26 Nov 2020 19:13:42 +0530
> Subject: [PATCH] Fix version information reporting for x265 git archival
>
> Release branch 3.5
> ---
> doc/reST/cli.rst | 17 +++-
> source/CMakeLists.txt | 2 +-
> source/cmake/Version.cmake | 193 +++++++++++++++++++++++++++++++++++++
> source/cmake/version.cmake | 97 -------------------
> x265Version.txt | 5 +
> 5 files changed, 214 insertions(+), 100 deletions(-)
> create mode 100644 source/cmake/Version.cmake
> delete mode 100644 source/cmake/version.cmake
> create mode 100644 x265Version.txt
>
> diff --git a/doc/reST/cli.rst b/doc/reST/cli.rst
> index dcb240202..f19a28734 100755
> --- a/doc/reST/cli.rst
> +++ b/doc/reST/cli.rst
> @@ -36,13 +36,26 @@ Executable Options
>
> .. option:: --help, -h
>
> - Display help text
> + Displays help text
>
> **CLI ONLY**
>
> .. option:: --version, -V
>
> - Display version details
> + Displays version details in the following manner *[Version
> Name]+/-[Number of commits from the release changeset]-/+[repository's head
> changeset SHA-1 paraphrase identifier]*
> + along with the compilation platform, build information and supported cpu
> capabilities.
> +
> + In case of release tar balls version information is partly derived from
> configuration file *x265Version.txt*
> + .. seeAlso:: For more information on how to configure the version file
> please refer to `<https://bitbucket.org/multicoreware/x265_git/wiki/Home>`_
> and Contribute pages for updates specific
> + release and version control management.
> +
> + **Example:**
> +
> + *x265 [info]: HEVC encoder version 3.4+27-'d9217cf00'*
> +
> + *x265 [info]: build info [Windows][MSVC 1916][64 bit] 10bit*
> +
> + *x265 [info]: using cpu capabilities: MMX2 SSE2Fast LZCNT SSSE3 SSE4.2
> AVX FMA3 BMI2 AVX2*
>
> **CLI ONLY**
>
> diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
> index 67e737512..95218f5dc 100755
> --- a/source/CMakeLists.txt
> +++ b/source/CMakeLists.txt
> @@ -485,7 +485,7 @@ if(POWER)
> endif()
> endif()
>
> -include(version) # determine X265_VERSION and X265_LATEST_TAG
> +include(Version) # determine X265_VERSION and X265_LATEST_TAG
> include_directories(. common encoder "${PROJECT_BINARY_DIR}")
>
> option(ENABLE_PPA "Enable PPA profiling instrumentation" OFF)
> diff --git a/source/cmake/Version.cmake b/source/cmake/Version.cmake
> new file mode 100644
> index 000000000..37c759268
> --- /dev/null
> +++ b/source/cmake/Version.cmake
> @@ -0,0 +1,193 @@
> +
> #################################################################################################################
> + #
> + # Copyright (C) 2013-2020 MulticoreWare, Inc
> + #
> + # 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.
> + #
> + # 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.
> + #
> + # 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., 51 Franklin Street, Fifth Floor, Boston, MA 02111,
> USA.
> + #
> + # This program is also available under a commercial proprietary license.
> + # For more information, contact us at license @ x265.com
> + #
> + # Authors: Janani T.E <janani.te at multicorewareinc.com>, Srikanth
> Kurapati <srikanthkurapati at multicorewareinc.com>
> + #
> +
> #################################################################################################################
> + # PURPOSE: Identity version control software version display, also read
> version files to present x265 version.
> +
> #################################################################################################################
> + #Default Settings, for user to be vigilant about x265 version being
> reported during product build.
> +set(X265_VERSION "unknown")
> +set(X265_LATEST_TAG "0.0")
> +set(X265_TAG_DISTANCE "0")
> +set(HG_ARCHETYPE "0")
> +set(GIT_ARCHETYPE "0")
> +
> +#Find version control software to be used for live and extracted
> repositories from compressed tarballs
> +if(CMAKE_VERSION VERSION_LESS "2.8.10")
> + find_program(HG_EXECUTABLE hg)
> + if(EXISTS "${HG_EXECUTABLE}.bat")
> + set(HG_EXECUTABLE "${HG_EXECUTABLE}.bat")
> + endif()
> + message(STATUS "hg found at ${HG_EXECUTABLE}")
> +else()
> + find_package(Hg QUIET)
> +endif()
> +if(HG_EXECUTABLE)
> + #Set Version Control binary for source code kind
> + if(EXISTS CMAKE_CURRENT_SOURCE_DIR}/../.hg_archival.txt)
> + set(HG_ARCHETYPE "1")
> + elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../.hg)
> + set(HG_ARCHETYPE "2")
> + endif()
> +endif(HG_EXECUTABLE)
> +find_package(Git QUIET) #No restrictions on Git versions used, any
> versions from 1.8.x to 2.2.x or later should do.
> +if(Git_FOUND)
> + find_program(GIT_EXECUTABLE git)
> + message(STATUS "GIT_EXECUTABLE ${GIT_EXECUTABLE}")
> + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../.git)
> + set(GIT_ARCHETYPE "2")
> + elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../x265Version.txt)
> + set(GIT_ARCHETYPE "1")
> + endif()
> +endif(Git_FOUND)
> +if(HG_ARCHETYPE STREQUAL "1")
> + #Read the lines of the archive summary file to extract the version
> + message(STATUS "SOURCE CODE IS FROM x265 ARCHIVED ZIP OR TAR BALL")
> + file(READ ${CMAKE_CURRENT_SOURCE_DIR}/../.hg_archival.txt archive)
> + STRING(REGEX REPLACE "\n" ";" archive "${archive}")
> + foreach(f ${archive})
> + string(FIND "${f}" ": " pos)
> + string(SUBSTRING "${f}" 0 ${pos} key)
> + string(SUBSTRING "${f}" ${pos} -1 value)
> + string(SUBSTRING "${value}" 2 -1 value)
> + set(hg_${key} ${value})
> + endforeach()
> + if(DEFINED hg_tag)
> + set(X265_LATEST_TAG ${hg_tag})
> + elseif(DEFINED hg_node)
> + set(X265_LATEST_TAG ${hg_latesttag})
> + set(X265_TAG_DISTANCE ${hg_latesttagdistance})
> + string(SUBSTRING "${hg_node}" 0 12 X265_REVISION_ID)
> + endif()
> + message(STATUS "HG ARCHIVAL INFORMATION PROCESSED")
> +elseif(HG_ARCHETYPE STREQUAL "2")
> + execute_process(COMMAND
> + ${HG_EXECUTABLE} log -r. --template "{latesttag}"
> + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
> + OUTPUT_VARIABLE X265_LATEST_TAG
> + ERROR_QUIET
> + OUTPUT_STRIP_TRAILING_WHITESPACE
> + )
> + execute_process(COMMAND
> + ${HG_EXECUTABLE} log -r. --template "{latesttagdistance}"
> + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
> + OUTPUT_VARIABLE X265_TAG_DISTANCE
> + ERROR_QUIET
> + OUTPUT_STRIP_TRAILING_WHITESPACE
> + )
> + execute_process(
> + COMMAND
> + ${HG_EXECUTABLE} log -r. --template "{node}"
> + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
> + OUTPUT_VARIABLE X265_REVISION_ID
> + ERROR_QUIET
> + OUTPUT_STRIP_TRAILING_WHITESPACE
> + )
> + string(SUBSTRING "${X265_REVISION_ID}" 0 12 X265_REVISION_ID)
> + if(X265_LATEST_TAG MATCHES "^r")
> + string(SUBSTRING ${X265_LATEST_TAG} 1 -1 X265_LATEST_TAG)
> + endif()
> + message(STATUS "HG LIVE REPO STATUS CHECK DONE")
> +elseif(GIT_ARCHETYPE STREQUAL "2")
> + execute_process(
> + COMMAND
> + ${GIT_EXECUTABLE} describe --abbrev=0 --tags
> + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
> + OUTPUT_VARIABLE X265_LATEST_TAG
> + ERROR_QUIET
> + OUTPUT_STRIP_TRAILING_WHITESPACE
> + )
> + execute_process(
> + COMMAND
> + ${GIT_EXECUTABLE} rev-list ${X265_LATEST_TAG}.. --count
> --first-parent
> + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
> + OUTPUT_VARIABLE X265_TAG_DISTANCE
> + ERROR_QUIET
> + OUTPUT_STRIP_TRAILING_WHITESPACE
> + )
> + execute_process(
> + COMMAND
> + ${GIT_EXECUTABLE} log --pretty=format:%h -n 1
> + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
> + OUTPUT_VARIABLE X265_REVISION_ID
> + ERROR_QUIET
> + OUTPUT_STRIP_TRAILING_WHITESPACE
> + )
> +elseif(GIT_ARCHETYPE STREQUAL "1")
> + message(STATUS "X265 GIT ARCHIVE EXTRACT VERSION INFORMATION
> PROCESSING")
> + #Read the lines of the archive summary file to extract the version
> + file(READ ${CMAKE_CURRENT_SOURCE_DIR}/../x265Version.txt filebuf)
> + STRING(REGEX REPLACE "\n" ";" filebuf "${filebuf}")
> + foreach(line ${filebuf})
> + string(FIND "${line}" ": " pos)
> + string(SUBSTRING "${line}" 0 ${pos} key)
> + string(SUBSTRING "${line}" ${pos} -1 value)
> + string(SUBSTRING "${value}" 2 -1 value)
> + set(git_${key} ${value})
> + endforeach()
> + if(DEFINED git_releasetag)
> + set(X265_LATEST_TAG ${git_releasetag})
> + if(DEFINED git_releasetagcommitid)
> + string(SUBSTRING "${git_releasetagcommitid}" 0 9
> X265_REVISION_ID)
> + else()
> + message(WARNING "RELEASE CHANGESET INFO NOT PRESENT IN
> VERSION FILE")
> + endif()
> + if(DEFINED git_repositorychangeset)
> + string(SUBSTRING "${git_repositorychangeset}" 0 9 X265_REPO_ID)
> + else()
> + message(STATUS "X265 LATEST COMMIT TIP INFORMATION NOT
> AVAILABLE")
> + endif()
> + if(DEFINED git_releasetagdistance)
> + set(X265_TAG_DISTANCE ${git_releasetagdistance})
> + else()
> + message(WARNING "COMMIT INFORMATION AFTER LATEST REVISION
> UNAVAILABLE")
> + endif()
> + else()
> + message(WARNING "X265 RELEASE VERSION LABEL MISSING:
> ${X265_LATEST_TAG}")
> + endif()
> +endif()
> +
> +# formatting based on positive or negative distance from tag
> +if(X265_TAG_DISTANCE STREQUAL "0")
> + if(X265_REVISION_ID STREQUAL X265_REPO_ID)
> + set(X265_VERSION "${X265_LATEST_TAG}")
> + else()
> + message(WARNING "REPO AND RELEASE CHANGESETS NOT MATCHING")
> + endif()
> +elseif(X265_TAG_DISTANCE STRGREATER "0")
> + if(X265_REVISION_ID STRLESS X265_REPO_ID)
> + set(X265_VERSION
> "${X265_LATEST_TAG}+${X265_TAG_DISTANCE}-${X265_REVISION_ID}")
> + else()
> + message(WARNING "ARCCHIVE TIP CHANGESET TO BE GREATER THAN
> REVISION ID")
> + endif()
> +elseif(X265_TAG_DISTANCE STRLESS "0")
> + if(X265_REVISION_ID STRGREATER X265_REPO_ID)
> + set(X265_VERSION
> "${X265_LATEST_TAG}${X265_TAG_DISTANCE}+${X265_REPO_ID}")
> + else()
> + message(WARNING "REVISION ID EXPECTED TO BE LARGER THAN ARCHIVE
> TIP CHANGESET")
> + endif()
> +else()
> + message(ERROR "Inappropriate set of version information")
> +endif()
> +
> +#will always be printed in its entirety based on version file
> configuration to avail revision monitoring by repo owners
> +message(STATUS "x265 RELEASE VERSION ${X265_VERSION}")
> diff --git a/source/cmake/version.cmake b/source/cmake/version.cmake
> deleted file mode 100644
> index 35302249a..000000000
> --- a/source/cmake/version.cmake
> +++ /dev/null
> @@ -1,97 +0,0 @@
> -if(CMAKE_VERSION VERSION_LESS "2.8.10")
> - find_program(HG_EXECUTABLE hg)
> -else()
> - find_package(Hg QUIET)
> -endif()
> -find_package(Git QUIET) # present in 2.8.8
> -
> -# defaults, in case everything below fails
> -set(X265_VERSION "unknown")
> -set(X265_LATEST_TAG "0.0")
> -set(X265_TAG_DISTANCE "0")
> -
> -if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../.hg_archival.txt)
> - # read the lines of the archive summary file to extract the version
> - file(READ ${CMAKE_CURRENT_SOURCE_DIR}/../.hg_archival.txt archive)
> - STRING(REGEX REPLACE "\n" ";" archive "${archive}")
> - foreach(f ${archive})
> - string(FIND "${f}" ": " pos)
> - string(SUBSTRING "${f}" 0 ${pos} key)
> - string(SUBSTRING "${f}" ${pos} -1 value)
> - string(SUBSTRING "${value}" 2 -1 value)
> - set(hg_${key} ${value})
> - endforeach()
> - if(DEFINED hg_tag)
> - set(X265_LATEST_TAG ${hg_tag})
> - elseif(DEFINED hg_node)
> - set(X265_LATEST_TAG ${hg_latesttag})
> - set(X265_TAG_DISTANCE ${hg_latesttagdistance})
> - string(SUBSTRING "${hg_node}" 0 12 X265_REVISION_ID)
> - endif()
> -elseif(HG_EXECUTABLE AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../.hg)
> - if(EXISTS "${HG_EXECUTABLE}.bat")
> - # mercurial source installs on Windows require .bat extension
> - set(HG_EXECUTABLE "${HG_EXECUTABLE}.bat")
> - endif()
> - message(STATUS "hg found at ${HG_EXECUTABLE}")
> -
> - execute_process(COMMAND
> - ${HG_EXECUTABLE} log -r. --template "{latesttag}"
> - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
> - OUTPUT_VARIABLE X265_LATEST_TAG
> - ERROR_QUIET
> - OUTPUT_STRIP_TRAILING_WHITESPACE
> - )
> - execute_process(COMMAND
> - ${HG_EXECUTABLE} log -r. --template "{latesttagdistance}"
> - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
> - OUTPUT_VARIABLE X265_TAG_DISTANCE
> - ERROR_QUIET
> - OUTPUT_STRIP_TRAILING_WHITESPACE
> - )
> - execute_process(
> - COMMAND
> - ${HG_EXECUTABLE} log -r. --template "{node}"
> - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
> - OUTPUT_VARIABLE X265_REVISION_ID
> - ERROR_QUIET
> - OUTPUT_STRIP_TRAILING_WHITESPACE
> - )
> - string(SUBSTRING "${X265_REVISION_ID}" 0 12 X265_REVISION_ID)
> -
> - if(X265_LATEST_TAG MATCHES "^r")
> - string(SUBSTRING ${X265_LATEST_TAG} 1 -1 X265_LATEST_TAG)
> - endif()
> -elseif(GIT_EXECUTABLE AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../.git)
> - execute_process(
> - COMMAND
> - ${GIT_EXECUTABLE} describe --abbrev=0 --tags
> - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
> - OUTPUT_VARIABLE X265_LATEST_TAG
> - ERROR_QUIET
> - OUTPUT_STRIP_TRAILING_WHITESPACE
> - )
> - execute_process(
> - COMMAND
> - ${GIT_EXECUTABLE} rev-list ${X265_LATEST_TAG}.. --count
> --first-parent
> - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
> - OUTPUT_VARIABLE X265_TAG_DISTANCE
> - ERROR_QUIET
> - OUTPUT_STRIP_TRAILING_WHITESPACE
> - )
> - execute_process(
> - COMMAND
> - ${GIT_EXECUTABLE} log -1 --format=g%h
> - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
> - OUTPUT_VARIABLE X265_REVISION_ID
> - ERROR_QUIET
> - OUTPUT_STRIP_TRAILING_WHITESPACE
> - )
> -endif()
> -if(X265_TAG_DISTANCE STREQUAL "0")
> - set(X265_VERSION "${X265_LATEST_TAG}")
> -else()
> - set(X265_VERSION
> "${X265_LATEST_TAG}+${X265_TAG_DISTANCE}-${X265_REVISION_ID}")
> -endif()
> -
> -message(STATUS "x265 version ${X265_VERSION}")
> diff --git a/x265Version.txt b/x265Version.txt
> new file mode 100644
> index 000000000..ea179871e
> --- /dev/null
> +++ b/x265Version.txt
> @@ -0,0 +1,5 @@
> +#Attribute: Values
> +repositorychangeset: 6722fce1f
> +releasetagcommitid: a4f320054
> +releasetagdistance: 31
> +releasetag: 3.4
> --
> 2.20.1.windows.1
>
>
> --
> *With Regards,*
> *Srikanth Kurapati.*
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
>
--
Regards,
*Aruna Matheswaran,*
Video Codec Engineer,
Media & AI analytics BU,
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20201215/0ccaa3db/attachment-0001.html>
More information about the x265-devel
mailing list