[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
Tue Oct 20 15:27:25 CEST 2020


>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*
+
+ .. 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)
+       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
-- 
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.*
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20201020/7e5d6193/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Fix-incorrect-version-display-issue-on-console-for-a.patch
Type: application/octet-stream
Size: 14859 bytes
Desc: not available
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20201020/7e5d6193/attachment-0001.obj>


More information about the x265-devel mailing list