xref: /aosp_15_r20/external/libwebsockets/cmake/FindGit.cmake (revision 1c60b9aca93fdbc9b5f19b2d2194c91294b22281)
1*1c60b9acSAndroid Build Coastguard Worker################################################################################
2*1c60b9acSAndroid Build Coastguard Worker#
3*1c60b9acSAndroid Build Coastguard Worker#  Program: 3D Slicer
4*1c60b9acSAndroid Build Coastguard Worker#
5*1c60b9acSAndroid Build Coastguard Worker#  Copyright (c) Kitware Inc.
6*1c60b9acSAndroid Build Coastguard Worker#
7*1c60b9acSAndroid Build Coastguard Worker#  See COPYRIGHT.txt
8*1c60b9acSAndroid Build Coastguard Worker#  or http://www.slicer.org/copyright/copyright.txt for details.
9*1c60b9acSAndroid Build Coastguard Worker#
10*1c60b9acSAndroid Build Coastguard Worker#  Unless required by applicable law or agreed to in writing, software
11*1c60b9acSAndroid Build Coastguard Worker#  distributed under the License is distributed on an "AS IS" BASIS,
12*1c60b9acSAndroid Build Coastguard Worker#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*1c60b9acSAndroid Build Coastguard Worker#  See the License for the specific language governing permissions and
14*1c60b9acSAndroid Build Coastguard Worker#  limitations under the License.
15*1c60b9acSAndroid Build Coastguard Worker#
16*1c60b9acSAndroid Build Coastguard Worker#  This file was originally developed by Jean-Christophe Fillion-Robin, Kitware Inc.
17*1c60b9acSAndroid Build Coastguard Worker#  and was partially funded by NIH grant 3P41RR013218-12S1
18*1c60b9acSAndroid Build Coastguard Worker#
19*1c60b9acSAndroid Build Coastguard Worker#  AG 2013-02-18: I got it from here
20*1c60b9acSAndroid Build Coastguard Worker#  https://github.com/Slicer/Slicer/blob/master/CMake/FindGit.cmake
21*1c60b9acSAndroid Build Coastguard Worker#  license is BSD
22*1c60b9acSAndroid Build Coastguard Worker#
23*1c60b9acSAndroid Build Coastguard Worker################################################################################
24*1c60b9acSAndroid Build Coastguard Worker
25*1c60b9acSAndroid Build Coastguard Worker#
26*1c60b9acSAndroid Build Coastguard Worker# The module defines the following variables:
27*1c60b9acSAndroid Build Coastguard Worker#   GIT_EXECUTABLE - path to git command line client
28*1c60b9acSAndroid Build Coastguard Worker#   GIT_FOUND - true if the command line client was found
29*1c60b9acSAndroid Build Coastguard Worker#
30*1c60b9acSAndroid Build Coastguard Worker# If the command line client executable is found the macro
31*1c60b9acSAndroid Build Coastguard Worker#  GIT_WC_INFO(<dir> <var-prefix>)
32*1c60b9acSAndroid Build Coastguard Worker# is defined to extract information of a git working copy at
33*1c60b9acSAndroid Build Coastguard Worker# a given location.
34*1c60b9acSAndroid Build Coastguard Worker#
35*1c60b9acSAndroid Build Coastguard Worker# The macro defines the following variables:
36*1c60b9acSAndroid Build Coastguard Worker#  <var-prefix>_WC_REVISION_HASH - Current SHA1 hash
37*1c60b9acSAndroid Build Coastguard Worker#  <var-prefix>_WC_REVISION - Current SHA1 hash
38*1c60b9acSAndroid Build Coastguard Worker#  <var-prefix>_WC_REVISION_NAME - Name associated with <var-prefix>_WC_REVISION_HASH
39*1c60b9acSAndroid Build Coastguard Worker#  <var-prefix>_WC_URL - output of command `git config --get remote.origin.url'
40*1c60b9acSAndroid Build Coastguard Worker#  <var-prefix>_WC_ROOT - Same value as working copy URL
41*1c60b9acSAndroid Build Coastguard Worker#  <var-prefix>_WC_GITSVN - Set to false
42*1c60b9acSAndroid Build Coastguard Worker#
43*1c60b9acSAndroid Build Coastguard Worker# ... and also the following ones if it's a git-svn repository:
44*1c60b9acSAndroid Build Coastguard Worker#  <var-prefix>_WC_GITSVN - Set to True if it is a
45*1c60b9acSAndroid Build Coastguard Worker#  <var-prefix>_WC_INFO - output of command `git svn info'
46*1c60b9acSAndroid Build Coastguard Worker#  <var-prefix>_WC_URL - url of the associated SVN repository
47*1c60b9acSAndroid Build Coastguard Worker#  <var-prefix>_WC_ROOT - root url of the associated SVN repository
48*1c60b9acSAndroid Build Coastguard Worker#  <var-prefix>_WC_REVISION - current SVN revision number
49*1c60b9acSAndroid Build Coastguard Worker#  <var-prefix>_WC_LAST_CHANGED_AUTHOR - author of last commit
50*1c60b9acSAndroid Build Coastguard Worker#  <var-prefix>_WC_LAST_CHANGED_DATE - date of last commit
51*1c60b9acSAndroid Build Coastguard Worker#  <var-prefix>_WC_LAST_CHANGED_REV - revision of last commit
52*1c60b9acSAndroid Build Coastguard Worker#  <var-prefix>_WC_LAST_CHANGED_LOG - last log of base revision
53*1c60b9acSAndroid Build Coastguard Worker#
54*1c60b9acSAndroid Build Coastguard Worker# Example usage:
55*1c60b9acSAndroid Build Coastguard Worker#   find_package(Git)
56*1c60b9acSAndroid Build Coastguard Worker#   if(GIT_FOUND)
57*1c60b9acSAndroid Build Coastguard Worker#    GIT_WC_INFO(${PROJECT_SOURCE_DIR} Project)
58*1c60b9acSAndroid Build Coastguard Worker#    message("Current revision is ${Project_WC_REVISION_HASH}")
59*1c60b9acSAndroid Build Coastguard Worker#    message("git found: ${GIT_EXECUTABLE}")
60*1c60b9acSAndroid Build Coastguard Worker#   endif()
61*1c60b9acSAndroid Build Coastguard Worker#
62*1c60b9acSAndroid Build Coastguard Worker
63*1c60b9acSAndroid Build Coastguard Worker# Look for 'git' or 'eg' (easy git)
64*1c60b9acSAndroid Build Coastguard Worker#
65*1c60b9acSAndroid Build Coastguard Workerset(git_names git eg)
66*1c60b9acSAndroid Build Coastguard Worker
67*1c60b9acSAndroid Build Coastguard Worker# Prefer .cmd variants on Windows unless running in a Makefile
68*1c60b9acSAndroid Build Coastguard Worker# in the MSYS shell.
69*1c60b9acSAndroid Build Coastguard Worker#
70*1c60b9acSAndroid Build Coastguard Workerif(WIN32)
71*1c60b9acSAndroid Build Coastguard Worker  if(NOT CMAKE_GENERATOR MATCHES "MSYS")
72*1c60b9acSAndroid Build Coastguard Worker    # Note: Due to a bug in 'git.cmd' preventing it from returning the exit code of 'git',
73*1c60b9acSAndroid Build Coastguard Worker    #       we excluded it from the list of executables to search.
74*1c60b9acSAndroid Build Coastguard Worker    # See http://code.google.com/p/msysgit/issues/detail?id=428
75*1c60b9acSAndroid Build Coastguard Worker    # TODO Check if 'git' exists, get the associated version, if the corresponding version
76*1c60b9acSAndroid Build Coastguard Worker    #      is known to have a working version of 'git.cmd', use it.
77*1c60b9acSAndroid Build Coastguard Worker    set(git_names git eg.cmd eg)
78*1c60b9acSAndroid Build Coastguard Worker  endif()
79*1c60b9acSAndroid Build Coastguard Workerendif()
80*1c60b9acSAndroid Build Coastguard Worker
81*1c60b9acSAndroid Build Coastguard Workerfind_program(GIT_EXECUTABLE ${git_names}
82*1c60b9acSAndroid Build Coastguard Worker  PATHS
83*1c60b9acSAndroid Build Coastguard Worker    "C:/Program Files/Git/bin"
84*1c60b9acSAndroid Build Coastguard Worker    "C:/Program Files (x86)/Git/bin"
85*1c60b9acSAndroid Build Coastguard Worker  DOC "git command line client")
86*1c60b9acSAndroid Build Coastguard Workermark_as_advanced(GIT_EXECUTABLE)
87*1c60b9acSAndroid Build Coastguard Worker
88*1c60b9acSAndroid Build Coastguard Workerif(GIT_EXECUTABLE)
89*1c60b9acSAndroid Build Coastguard Worker  macro(GIT_WC_INFO dir prefix)
90*1c60b9acSAndroid Build Coastguard Worker    execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --verify -q --short=7 HEAD
91*1c60b9acSAndroid Build Coastguard Worker       WORKING_DIRECTORY ${dir}
92*1c60b9acSAndroid Build Coastguard Worker       ERROR_VARIABLE GIT_error
93*1c60b9acSAndroid Build Coastguard Worker       OUTPUT_VARIABLE ${prefix}_WC_REVISION_HASH
94*1c60b9acSAndroid Build Coastguard Worker       OUTPUT_STRIP_TRAILING_WHITESPACE)
95*1c60b9acSAndroid Build Coastguard Worker    set(${prefix}_WC_REVISION ${${prefix}_WC_REVISION_HASH})
96*1c60b9acSAndroid Build Coastguard Worker    if(NOT ${GIT_error} EQUAL 0)
97*1c60b9acSAndroid Build Coastguard Worker      message(SEND_ERROR "Command \"${GIT_EXECUTBALE} rev-parse --verify -q --short=7 HEAD\" in directory ${dir} failed with output:\n${GIT_error}")
98*1c60b9acSAndroid Build Coastguard Worker    else(NOT ${GIT_error} EQUAL 0)
99*1c60b9acSAndroid Build Coastguard Worker      execute_process(COMMAND ${GIT_EXECUTABLE} name-rev ${${prefix}_WC_REVISION_HASH}
100*1c60b9acSAndroid Build Coastguard Worker         WORKING_DIRECTORY ${dir}
101*1c60b9acSAndroid Build Coastguard Worker         OUTPUT_VARIABLE ${prefix}_WC_REVISION_NAME
102*1c60b9acSAndroid Build Coastguard Worker          OUTPUT_STRIP_TRAILING_WHITESPACE)
103*1c60b9acSAndroid Build Coastguard Worker    endif(NOT ${GIT_error} EQUAL 0)
104*1c60b9acSAndroid Build Coastguard Worker
105*1c60b9acSAndroid Build Coastguard Worker    execute_process(COMMAND ${GIT_EXECUTABLE} config --get remote.origin.url
106*1c60b9acSAndroid Build Coastguard Worker       WORKING_DIRECTORY ${dir}
107*1c60b9acSAndroid Build Coastguard Worker       OUTPUT_VARIABLE ${prefix}_WC_URL
108*1c60b9acSAndroid Build Coastguard Worker       OUTPUT_STRIP_TRAILING_WHITESPACE)
109*1c60b9acSAndroid Build Coastguard Worker
110*1c60b9acSAndroid Build Coastguard Worker    set(${prefix}_WC_GITSVN False)
111*1c60b9acSAndroid Build Coastguard Worker
112*1c60b9acSAndroid Build Coastguard Worker    # Check if this git is likely to be a git-svn repository
113*1c60b9acSAndroid Build Coastguard Worker    execute_process(COMMAND ${GIT_EXECUTABLE} config --get-regexp "^svn-remote"
114*1c60b9acSAndroid Build Coastguard Worker      WORKING_DIRECTORY ${dir}
115*1c60b9acSAndroid Build Coastguard Worker      OUTPUT_VARIABLE git_config_output
116*1c60b9acSAndroid Build Coastguard Worker      OUTPUT_STRIP_TRAILING_WHITESPACE
117*1c60b9acSAndroid Build Coastguard Worker      )
118*1c60b9acSAndroid Build Coastguard Worker
119*1c60b9acSAndroid Build Coastguard Worker    if(NOT "${git_config_output}" STREQUAL "")
120*1c60b9acSAndroid Build Coastguard Worker      # In case git-svn is used, attempt to extract svn info
121*1c60b9acSAndroid Build Coastguard Worker      execute_process(COMMAND ${GIT_EXECUTABLE} svn info
122*1c60b9acSAndroid Build Coastguard Worker        WORKING_DIRECTORY ${dir}
123*1c60b9acSAndroid Build Coastguard Worker        TIMEOUT 3
124*1c60b9acSAndroid Build Coastguard Worker        ERROR_VARIABLE git_svn_info_error
125*1c60b9acSAndroid Build Coastguard Worker        OUTPUT_VARIABLE ${prefix}_WC_INFO
126*1c60b9acSAndroid Build Coastguard Worker        RESULT_VARIABLE git_svn_info_result
127*1c60b9acSAndroid Build Coastguard Worker        OUTPUT_STRIP_TRAILING_WHITESPACE)
128*1c60b9acSAndroid Build Coastguard Worker
129*1c60b9acSAndroid Build Coastguard Worker      if(${git_svn_info_result} EQUAL 0)
130*1c60b9acSAndroid Build Coastguard Worker        set(${prefix}_WC_GITSVN True)
131*1c60b9acSAndroid Build Coastguard Worker        string(REGEX REPLACE "^(.*\n)?URL: ([^\n]+).*"
132*1c60b9acSAndroid Build Coastguard Worker          "\\2" ${prefix}_WC_URL "${${prefix}_WC_INFO}")
133*1c60b9acSAndroid Build Coastguard Worker        string(REGEX REPLACE "^(.*\n)?Revision: ([^\n]+).*"
134*1c60b9acSAndroid Build Coastguard Worker          "\\2" ${prefix}_WC_REVISION "${${prefix}_WC_INFO}")
135*1c60b9acSAndroid Build Coastguard Worker        string(REGEX REPLACE "^(.*\n)?Repository Root: ([^\n]+).*"
136*1c60b9acSAndroid Build Coastguard Worker          "\\2" ${prefix}_WC_ROOT "${${prefix}_WC_INFO}")
137*1c60b9acSAndroid Build Coastguard Worker        string(REGEX REPLACE "^(.*\n)?Last Changed Author: ([^\n]+).*"
138*1c60b9acSAndroid Build Coastguard Worker          "\\2" ${prefix}_WC_LAST_CHANGED_AUTHOR "${${prefix}_WC_INFO}")
139*1c60b9acSAndroid Build Coastguard Worker        string(REGEX REPLACE "^(.*\n)?Last Changed Rev: ([^\n]+).*"
140*1c60b9acSAndroid Build Coastguard Worker          "\\2" ${prefix}_WC_LAST_CHANGED_REV "${${prefix}_WC_INFO}")
141*1c60b9acSAndroid Build Coastguard Worker        string(REGEX REPLACE "^(.*\n)?Last Changed Date: ([^\n]+).*"
142*1c60b9acSAndroid Build Coastguard Worker          "\\2" ${prefix}_WC_LAST_CHANGED_DATE "${${prefix}_WC_INFO}")
143*1c60b9acSAndroid Build Coastguard Worker      endif(${git_svn_info_result} EQUAL 0)
144*1c60b9acSAndroid Build Coastguard Worker    endif(NOT "${git_config_output}" STREQUAL "")
145*1c60b9acSAndroid Build Coastguard Worker
146*1c60b9acSAndroid Build Coastguard Worker    # If there is no 'remote.origin', default to "NA" value and print a warning message.
147*1c60b9acSAndroid Build Coastguard Worker    if(NOT ${prefix}_WC_URL)
148*1c60b9acSAndroid Build Coastguard Worker      message(WARNING "No remote origin set for git repository: ${dir}" )
149*1c60b9acSAndroid Build Coastguard Worker      set( ${prefix}_WC_URL "NA" )
150*1c60b9acSAndroid Build Coastguard Worker    else()
151*1c60b9acSAndroid Build Coastguard Worker      set(${prefix}_WC_ROOT ${${prefix}_WC_URL})
152*1c60b9acSAndroid Build Coastguard Worker    endif()
153*1c60b9acSAndroid Build Coastguard Worker
154*1c60b9acSAndroid Build Coastguard Worker  endmacro(GIT_WC_INFO)
155*1c60b9acSAndroid Build Coastguard Workerendif(GIT_EXECUTABLE)
156*1c60b9acSAndroid Build Coastguard Worker
157*1c60b9acSAndroid Build Coastguard Worker# Handle the QUIETLY and REQUIRED arguments and set GIT_FOUND to TRUE if
158*1c60b9acSAndroid Build Coastguard Worker# all listed variables are TRUE
159*1c60b9acSAndroid Build Coastguard Worker
160*1c60b9acSAndroid Build Coastguard Workerinclude(FindPackageHandleStandardArgs)
161*1c60b9acSAndroid Build Coastguard Workerfind_package_handle_standard_args(Git DEFAULT_MSG GIT_EXECUTABLE)
162*1c60b9acSAndroid Build Coastguard Worker
163*1c60b9acSAndroid Build Coastguard Worker
164