On Tue, Oct 20, 2020 at 6:57 PM Srikanth Kurapati < srikanth.kurap...@multicorewareinc.com> wrote:
> From 07b19f58c24f5c9919f49309a9e299aae825f784 Mon Sep 17 00:00:00 2001 > From: Srikanth Kurapati <srikanth.kurap...@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...@multicorewareinc.com>, Srikanth > Kurapati <srikanthkurap...@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.kurap...@multicorewareinc.com> wrote: > >> >> >> On Mon, Oct 19, 2020 at 9:09 PM Aruna Matheswaran < >> ar...@multicorewareinc.com> wrote: >> >>> >>> >>> On Sun, Oct 18, 2020 at 5:28 PM Srikanth Kurapati < >>> srikanth.kurap...@multicorewareinc.com> wrote: >>> >>>> From 89c497c96918c22aa4dd074e603ec8ce56982415 Mon Sep 17 00:00:00 2001 >>>> From: Srikanth Kurapati <srikanth.kurap...@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...@multicorewareinc.com>, Srikanth >>>> Kurapati <srikanthkurap...@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@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@videolan.org >>> https://mailman.videolan.org/listinfo/x265-devel >>> >> >> >> -- >> *With Regards,* >> *Srikanth Kurapati.* >> > > > -- > *With Regards,* > *Srikanth Kurapati.* > _______________________________________________ > x265-devel mailing list > x265-devel@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@videolan.org https://mailman.videolan.org/listinfo/x265-devel