[x265] [X265] [PATCH] [Master and Release 3.x] Adds support for archival and version reporting for git repositories

Aruna Matheswaran aruna at multicorewareinc.com
Thu Oct 29 17:09:24 CET 2020


On Tue, Oct 20, 2020 at 6:57 PM Srikanth Kurapati <
srikanth.kurapati at multicorewareinc.com> wrote:

> From 07b19f58c24f5c9919f49309a9e299aae825f784 Mon Sep 17 00:00:00 2001
> From: Srikanth Kurapati <srikanth.kurapati at multicorewareinc.com>
> Date: Tue, 13 Oct 2020 20:46:56 +0530
> Subject: [PATCH] Fix incorrect version display issue on console for
> archived
>  repositories.
>
> 1. adds a new file x265version.txt to maintain version information across
> releases.
> 2. adds functionality to process the same & updates documentation.
> ---
>  doc/reST/cli.rst           |  11 ++-
>  source/CMakeLists.txt      |   2 +-
>  source/cmake/Version.cmake | 193 +++++++++++++++++++++++++++++++++++++
>  source/cmake/version.cmake |  97 -------------------
>  x265Version.txt            |   5 +
>  5 files changed, 208 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 1a1de9f50..26ff3ff7a 100755
> --- a/doc/reST/cli.rst
> +++ b/doc/reST/cli.rst
> @@ -36,13 +36,20 @@ 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 format *[Version
> Name]+/-[Number of commits from the release changeset]-/+[repository's head
> changeset  SHA-1 paraphrase identifier]* using input from
> + version control software *Git or Mercurial* for cloned repositories. In
> case of release of any specific archive of x265 generated using version
> control software the cli option displays
> + the version string using information from configuration in file
> *x265Version.txt*
>
[AM] Still this is misleading. --version lists build details in addition to
tag info.

> +
> + .. seeAlso::  For more information on how to edit 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 for git repositories:** <h1>x265 [info]: HEVC encoder version
> 3.4+26-a82c6c7a7<\h1>
>
>   **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..683a6c6fb
> --- /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)
>
[AM] What is the significance of this check? Is this with the assumption
that the commit hash values are in ascending order??

> +       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..221a7a6d9
> --- /dev/null
> +++ b/x265Version.txt
> @@ -0,0 +1,5 @@
> +#Attribute:     Values
> +repositorychangeset: a82c6c7a7
> +releasetagcommitid: 6722fce1f
> +releasetagdistance: 28
> +releasetag: Release_3.5
>
[AM] Release_3.5 is not a valid tag.
Also, as I mentioned already, each branch must have different versions of
x265Version.txt.

> --
> 2.20.1.windows.1
>
>
> On Tue, Oct 20, 2020 at 5:19 PM Srikanth Kurapati <
> srikanth.kurapati at multicorewareinc.com> wrote:
>
>>
>>
>> On Mon, Oct 19, 2020 at 9:09 PM Aruna Matheswaran <
>> aruna at multicorewareinc.com> wrote:
>>
>>>
>>>
>>> On Sun, Oct 18, 2020 at 5:28 PM Srikanth Kurapati <
>>> srikanth.kurapati at multicorewareinc.com> wrote:
>>>
>>>> From 89c497c96918c22aa4dd074e603ec8ce56982415 Mon Sep 17 00:00:00 2001
>>>> From: Srikanth Kurapati <srikanth.kurapati at multicorewareinc.com>
>>>> Date: Tue, 13 Oct 2020 20:46:56 +0530
>>>> Subject: [PATCH] fix enables git repository archival for x265 release
>>>> versions
>>>>
>>> [AM] Commit message is confusing to me. Needs to be changed to something
>>> like "Fix incorrect version display in archived git repositories"
>>>
>>    [KS] simplified.
>>
>>>
>>>> ---
>>>>  doc/reST/cli.rst           |   8 +-
>>>>  source/CMakeLists.txt      |   2 +-
>>>>  source/cmake/Version.cmake | 172 +++++++++++++++++++++++++++++++++++++
>>>>  source/cmake/version.cmake |  97 ---------------------
>>>>  x265Version.txt            |   5 ++
>>>>  5 files changed, 184 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 1a1de9f50..716b51e01 100755
>>>> --- a/doc/reST/cli.rst
>>>> +++ b/doc/reST/cli.rst
>>>> @@ -36,13 +36,17 @@ Executable Options
>>>>
>>>>  .. option:: --help, -h
>>>>
>>>> - Display help text
>>>> + Displays help text
>>>>
>>>>   **CLI ONLY**
>>>>
>>>>  .. option:: --version, -V
>>>>
>>>> - Display version details
>>>> + Displays version details in  *[Version Name]+[commit count from
>>>> Release Tag]-[Tag SHA-1 paraphrase formatted string or substring]* format
>>>> using input from
>>>> + version control software *Git or Mercurial*. Product Archives display
>>>> the same using information from configuration in file *x265Version.txt*
>>>> + **Example for git repositories:** <h1>x265 [info]: HEVC encoder
>>>> version 3.4+26-a82c6c7a7<\h1>
>>>> +
>>>>
>>> [AM] The help statement is misleading. --version is not just restricted
>>> to displaying tag details. It does provide other build details.
>>>
>>    [re phrased]
>>
>>> + .. seeAlso::  For more information please refer to `<
>>>> https://bitbucket.org/multicoreware/x265_git/wiki/Home>`_  and
>>>> Contribute pages for updates.
>>>>
>>>>   **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..836f482e6
>>>> --- /dev/null
>>>> +++ b/source/cmake/Version.cmake
>>>> @@ -0,0 +1,172 @@
>>>> +
>>>> #################################################################################################################
>>>> + #
>>>> + #    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_REPO_ID "unknown")
>>>> +set(X265_LATEST_TAG "0.0")
>>>> +set(X265_TAG_DISTANCE "0")
>>>> +set(IS_HG_ARCHIVE_REPO "0")
>>>> +set(IS_HG_LIVE_REPO "0")
>>>>
>>> [AM] Why is another flag IS_HG_LIVE_REPO required? Shall be handled with
>>> one flag.
>>>
>>    [KS] optimized, had initially added them for keeping the cases
>> distinctly readable
>>
>>> +set(IS_GIT_ARCHIVE_REPO "0")
>>>> +set(IS_GIT_LIVE_REPO "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(IS_HG_ARCHIVE_REPO "1")
>>>> +    elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../.hg)
>>>> +        set(IS_HG_LIVE_REPO "1")
>>>> +    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(IS_GIT_LIVE_REPO "1")
>>>> +    elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../x265Version.txt)
>>>> +        set(IS_GIT_ARCHIVE_REPO "1")
>>>> +    endif()
>>>> +endif(Git_FOUND)
>>>> +if(IS_HG_ARCHIVE_REPO 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(IS_HG_LIVE_REPO STREQUAL "1")
>>>> +    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(IS_GIT_LIVE_REPO STREQUAL "1")
>>>> +    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(IS_GIT_ARCHIVE_REPO 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")
>>>>
>>> [AM] Shouldn't it throw an error message?
>>>
>>    [KS] As shared with you offline before the cmake error messages will
>> abort the build whereas warnings will inform the user with stack trace and
>> proceed. Which one do you think is desirable for the functionality. I feel
>> we can inform the user with warning and carry on with the rest of the
>> build. The warning will appear when make-solutions is run and also during
>> cmake configure through gui so by then users might become aware that they
>> might have to re configure the version file correctly before archival of
>> the repository.
>>
>>> +        endif()
>>>> +        if(DEFINED git_repositorychangeset)
>>>> +           string(SUBSTRING "${git_repositorychangeset}" 0 9
>>>> X265_REPO_ID)
>>>>
>>> [AM] I don't see  X265_REPO_ID getting used anywhere. Please clarify the
>>> need for  X265_REPO_ID.
>>>
>>    [KS] updated code for using the same as the archive can be created
>> at/before or after the latest tag.
>>
>>> +        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()
>>>> +set(X265_VERSION
>>>> "${X265_LATEST_TAG}+${X265_TAG_DISTANCE}-${X265_REVISION_ID}")
>>>> +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
>>>>
>>> [AM] Renaming the file makes it tough to review the changes as it
>>> replaces the file instead of modifying the code. Any reason behind the
>>> renaming?
>>>
>>    [KS] Most of the files in cmake source dir follow Camel case hence
>> updated the same for uniformity also cmake is case sensitive to file names
>> in linux.
>>
>>> +++ /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}")
>>>>
>>> [AM] Since this chunk has been removed in Version.cmake, the version
>>> info will look messy if   X265_LATEST_TAG is 0.
>>>
>>     Its printed as Release_3.4+0-abcedf07- simplified for readability in
>> this case but once the user has understood the version format documentation
>> and wiki updates it should not be a problem.
>>
>>> -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..74b23469e
>>>> --- /dev/null
>>>> +++ b/x265Version.txt
>>>> @@ -0,0 +1,5 @@
>>>> +#Attribute:     Values
>>>> +repositorychangeset: a82c6c7a7
>>>> +releasetagcommitid: 6722fce1f
>>>> +releasetagdistance: 28
>>>> +releasetag: 3.5
>>>>
>>> [AM] 3.5 isn't a valid tag.
>>>
>>    [KS] ok set of Release_3.5 or it can be 3.5_RC1 or 2 and so on as per
>> wiki pages.
>>
>>> Also, the commit message says the patch is applicable for master and
>>> Release_3.x. In that case, one x265Version.txt file per branch is expected.
>>>
>>   [KS] No then we will have to keep adding one file per release. Instead
>> if the same patch is pushed to all branches and with the version file
>> updated for a given branch we don't need multiple copies for maintaining
>> the same information, the file can be appended from release to release as
>> the latest entries are always considered for populating the version string.
>>
>> Please get back on my answers so that I can send the patch soon.
>>
>> --
>>>> 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,
>>>
>>>
>>>
>>> _______________________________________________
>>> x265-devel mailing list
>>> x265-devel at videolan.org
>>> https://mailman.videolan.org/listinfo/x265-devel
>>>
>>
>>
>> --
>> *With Regards,*
>> *Srikanth Kurapati.*
>>
>
>
> --
> *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/20201029/38772adc/attachment-0001.html>


More information about the x265-devel mailing list