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

Srikanth Kurapati srikanth.kurapati at multicorewareinc.com
Mon Nov 2 08:43:00 CET 2020


[AM] Still this is misleading. --version lists build details in addition to
tag info.
[KS] Not at all, its similar to with other open source softwares like
ffmpeg
Example: "ffmpeg version N-94147-ge51cc7ed85"
[AM] What is the significance of this check? Is this with the assumption
that the commit hash values are in ascending order??
[KS] To check if information in tag distance information is correlating to
changeset info. STRGREATER checks if the strings are lexicographically
greater than
AM] Release_3.5 is not a valid tag.
[KS]  releasetag: refers to name of the tag.




On Thu, Oct 29, 2020 at 9:39 PM Aruna Matheswaran <
aruna at multicorewareinc.com> wrote:

>
>
> 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,
>
>
>
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
>


-- 
*With Regards,*
*Srikanth Kurapati.*
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20201102/609d6eac/attachment-0001.html>


More information about the x265-devel mailing list