[vcpkg_from_git] new options TAG and X_OUT_REF (#15049)

* [vcpkg_from_git] new options TAG and OUT_REF
- TAG github tag to checkout
- OUT_REF github commit id related to tag or ref
(useable for automatic updates of ports if used with a version tag)

* Apply suggestions from code review

Co-authored-by: Robert Schumacher <roschuma@microsoft.com>

* additional changes due to CR

* regenerate docs

Co-authored-by: Robert Schumacher <roschuma@microsoft.com>
This commit is contained in:
Alexander Neumann 2021-01-11 09:27:56 +01:00 committed by GitHub
parent 6b2f51fc7a
commit 0b16dbc1cf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 4 deletions

View File

@ -8,6 +8,7 @@ vcpkg_from_git(
OUT_SOURCE_PATH <SOURCE_PATH> OUT_SOURCE_PATH <SOURCE_PATH>
URL <https://android.googlesource.com/platform/external/fdlibm> URL <https://android.googlesource.com/platform/external/fdlibm>
REF <59f7335e4d...> REF <59f7335e4d...>
[TAG <v1.0.2>]
[PATCHES <patch1.patch> <patch2.patch>...] [PATCHES <patch1.patch> <patch2.patch>...]
) )
``` ```
@ -24,11 +25,17 @@ The url of the git repository.
### REF ### REF
The git sha of the commit to download. The git sha of the commit to download.
### TAG
An optional git tag to be verified against the `REF`. If the remote repository's tag does not match the specified `REF`, the build will fail.
### PATCHES ### PATCHES
A list of patches to be applied to the extracted sources. A list of patches to be applied to the extracted sources.
Relative paths are based on the port directory. Relative paths are based on the port directory.
### X_OUT_REF (internal only)
This parameter is used for automatic REF updates for certain ports in the central vcpkg catalog. It should not be used by any ports outside the central catalog and within the central catalog it should not be used on any user path. This parameter may change behavior incompatibly or be removed at any time.
## Notes: ## Notes:
`OUT_SOURCE_PATH`, `REF`, and `URL` must be specified. `OUT_SOURCE_PATH`, `REF`, and `URL` must be specified.

View File

@ -9,6 +9,7 @@ vcpkg_from_git(
OUT_SOURCE_PATH <SOURCE_PATH> OUT_SOURCE_PATH <SOURCE_PATH>
URL <https://android.googlesource.com/platform/external/fdlibm> URL <https://android.googlesource.com/platform/external/fdlibm>
REF <59f7335e4d...> REF <59f7335e4d...>
[TAG <v1.0.2>]
[PATCHES <patch1.patch> <patch2.patch>...] [PATCHES <patch1.patch> <patch2.patch>...]
) )
``` ```
@ -25,11 +26,17 @@ The url of the git repository.
### REF ### REF
The git sha of the commit to download. The git sha of the commit to download.
### TAG
An optional git tag to be verified against the `REF`. If the remote repository's tag does not match the specified `REF`, the build will fail.
### PATCHES ### PATCHES
A list of patches to be applied to the extracted sources. A list of patches to be applied to the extracted sources.
Relative paths are based on the port directory. Relative paths are based on the port directory.
### X_OUT_REF (internal only)
This parameter is used for automatic REF updates for certain ports in the central vcpkg catalog. It should not be used by any ports outside the central catalog and within the central catalog it should not be used on any user path. This parameter may change behavior incompatibly or be removed at any time.
## Notes: ## Notes:
`OUT_SOURCE_PATH`, `REF`, and `URL` must be specified. `OUT_SOURCE_PATH`, `REF`, and `URL` must be specified.
@ -41,7 +48,7 @@ Relative paths are based on the port directory.
include(vcpkg_execute_in_download_mode) include(vcpkg_execute_in_download_mode)
function(vcpkg_from_git) function(vcpkg_from_git)
set(oneValueArgs OUT_SOURCE_PATH URL REF) set(oneValueArgs OUT_SOURCE_PATH URL REF TAG X_OUT_REF)
set(multipleValuesArgs PATCHES) set(multipleValuesArgs PATCHES)
# parse parameters such that semicolons in options arguments to COMMAND don't get erased # parse parameters such that semicolons in options arguments to COMMAND don't get erased
cmake_parse_arguments(PARSE_ARGV 0 _vdud "" "${oneValueArgs}" "${multipleValuesArgs}") cmake_parse_arguments(PARSE_ARGV 0 _vdud "" "${oneValueArgs}" "${multipleValuesArgs}")
@ -58,8 +65,12 @@ function(vcpkg_from_git)
message(FATAL_ERROR "The git ref must be specified.") message(FATAL_ERROR "The git ref must be specified.")
endif() endif()
if(NOT DEFINED _vdud_TAG)
set(_vdud_TAG ${_vdud_REF})
endif()
# using .tar.gz instead of .zip because the hash of the latter is affected by timezone. # using .tar.gz instead of .zip because the hash of the latter is affected by timezone.
string(REPLACE "/" "-" SANITIZED_REF "${_vdud_REF}") string(REPLACE "/" "-" SANITIZED_REF "${_vdud_TAG}")
set(TEMP_ARCHIVE "${DOWNLOADS}/temp/${PORT}-${SANITIZED_REF}.tar.gz") set(TEMP_ARCHIVE "${DOWNLOADS}/temp/${PORT}-${SANITIZED_REF}.tar.gz")
set(ARCHIVE "${DOWNLOADS}/${PORT}-${SANITIZED_REF}.tar.gz") set(ARCHIVE "${DOWNLOADS}/${PORT}-${SANITIZED_REF}.tar.gz")
set(TEMP_SOURCE_PATH "${CURRENT_BUILDTREES_DIR}/src/${SANITIZED_REF}") set(TEMP_SOURCE_PATH "${CURRENT_BUILDTREES_DIR}/src/${SANITIZED_REF}")
@ -79,7 +90,7 @@ function(vcpkg_from_git)
) )
vcpkg_execute_required_process( vcpkg_execute_required_process(
ALLOW_IN_DOWNLOAD_MODE ALLOW_IN_DOWNLOAD_MODE
COMMAND ${GIT} fetch ${_vdud_URL} ${_vdud_REF} --depth 1 -n COMMAND ${GIT} fetch ${_vdud_URL} ${_vdud_TAG} --depth 1 -n
WORKING_DIRECTORY ${DOWNLOADS}/git-tmp WORKING_DIRECTORY ${DOWNLOADS}/git-tmp
LOGNAME git-fetch-${TARGET_TRIPLET} LOGNAME git-fetch-${TARGET_TRIPLET}
) )
@ -94,8 +105,13 @@ function(vcpkg_from_git)
message(FATAL_ERROR "unable to determine FETCH_HEAD after fetching git repository") message(FATAL_ERROR "unable to determine FETCH_HEAD after fetching git repository")
endif() endif()
string(REGEX REPLACE "\n$" "" REV_PARSE_HEAD "${REV_PARSE_HEAD}") string(REGEX REPLACE "\n$" "" REV_PARSE_HEAD "${REV_PARSE_HEAD}")
if(NOT REV_PARSE_HEAD STREQUAL _vdud_REF) if(NOT REV_PARSE_HEAD STREQUAL _vdud_REF AND NOT DEFINED _vdud_X_OUT_REF)
message(STATUS "[Expected : ( ${_vdud_REF} )]")
message(STATUS "[ Actual : ( ${REV_PARSE_HEAD} )]")
message(FATAL_ERROR "REF (${_vdud_REF}) does not match FETCH_HEAD (${REV_PARSE_HEAD})") message(FATAL_ERROR "REF (${_vdud_REF}) does not match FETCH_HEAD (${REV_PARSE_HEAD})")
elseif(DEFINED _vdud_X_OUT_REF)
set(${_vdud_X_OUT_REF} ${REV_PARSE_HEAD} PARENT_SCOPE)
return()
endif() endif()
file(MAKE_DIRECTORY "${DOWNLOADS}/temp") file(MAKE_DIRECTORY "${DOWNLOADS}/temp")