[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