diff options
| author | ras0219 <533828+ras0219@users.noreply.github.com> | 2020-07-13 13:43:39 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-07-13 13:43:39 -0700 |
| commit | 385fb523320da4617966e34fcd586beecfcc9014 (patch) | |
| tree | c4a66d3446fa429539c05e7ba1a5f633214dc9d3 /scripts | |
| parent | 63578d09b00fb2b33ddc0d38685eadbb1a3ffa3a (diff) | |
| download | vcpkg-385fb523320da4617966e34fcd586beecfcc9014.tar.gz vcpkg-385fb523320da4617966e34fcd586beecfcc9014.zip | |
[vcpkg] Track hashes of cmake script helpers in consuming portfiles (#12254)
* [vcpkg] Track hashes of cmake script helpers in consuming portfiles
* [vcpkg] Format
* [vcpkg_find_acquire_program] Use cpkg_from_sourceforge for FLEX and BISON
Co-authored-by: Robert Schumacher <roschuma@microsoft.com>
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/cmake/vcpkg_find_acquire_program.cmake | 108 | ||||
| -rw-r--r-- | scripts/cmake/vcpkg_from_sourceforge.cmake | 14 |
2 files changed, 68 insertions, 54 deletions
diff --git a/scripts/cmake/vcpkg_find_acquire_program.cmake b/scripts/cmake/vcpkg_find_acquire_program.cmake index 58a5380c2..a5aefdc29 100644 --- a/scripts/cmake/vcpkg_find_acquire_program.cmake +++ b/scripts/cmake/vcpkg_find_acquire_program.cmake @@ -244,33 +244,28 @@ function(vcpkg_find_acquire_program VAR) set(URL "https://github.com/mesonbuild/meson/archive/0.54.2.zip") set(ARCHIVE "meson-0.54.2.zip") set(HASH 8d19110bad3e6a223d1d169e833b746b884ece9cd23d2539ec02dccb5cd0c56542414b7afc0f7f2adcec9d957e4120d31f41734397aa0a7ee7f9c29ebdc9eb4c) - elseif(VAR MATCHES "FLEX") + elseif(VAR MATCHES "FLEX" OR VAR MATCHES "BISON") if(CMAKE_HOST_WIN32) - set(PROGNAME win_flex) - set(SUBDIR win_flex-2.5.16) - set(PATHS ${DOWNLOADS}/tools/win_flex/${SUBDIR}) - set(URL "https://sourceforge.net/projects/winflexbison/files/winflexbison-2.5.16.zip/download") - set(ARCHIVE "win_flex_bison-2.5.16.zip") - set(HASH 0a14154bff5d998feb23903c46961528f8ccb4464375d5384db8c4a7d230c0c599da9b68e7a32f3217a0a0735742242eaf3769cb4f03e00931af8640250e9123) + set(SOURCEFORGE_ARGS + REPO winflexbison + FILENAME winflexbison-2.5.16.zip + SHA512 0a14154bff5d998feb23903c46961528f8ccb4464375d5384db8c4a7d230c0c599da9b68e7a32f3217a0a0735742242eaf3769cb4f03e00931af8640250e9123 + NO_REMOVE_ONE_LEVEL + WORKING_DIRECTORY "${DOWNLOADS}/tools/winflexbison" + ) + if(VAR MATCHES "FLEX") + set(PROGNAME win_flex) + else() + set(PROGNAME win_bison) + endif() + set(PATHS ${DOWNLOADS}/tools/winflexbison/0a14154bff-a8cf65db07) if(NOT EXISTS "${PATHS}/data/m4sugar/m4sugar.m4") file(REMOVE_RECURSE "${PATHS}") endif() - else() + elseif(VAR MATCHES "FLEX") set(PROGNAME flex) set(APT_PACKAGE_NAME flex) set(BREW_PACKAGE_NAME flex) - endif() - elseif(VAR MATCHES "BISON") - if(CMAKE_HOST_WIN32) - set(PROGNAME win_bison) - set(SUBDIR win_bison-2.5.16) - set(PATHS ${DOWNLOADS}/tools/win_bison/${SUBDIR}) - set(URL "https://sourceforge.net/projects/winflexbison/files/winflexbison-2.5.16.zip/download") - set(ARCHIVE "win_flex_bison-2.5.16.zip") - set(HASH 0a14154bff5d998feb23903c46961528f8ccb4464375d5384db8c4a7d230c0c599da9b68e7a32f3217a0a0735742242eaf3769cb4f03e00931af8640250e9123) - if(NOT EXISTS "${PATHS}/data/m4sugar/m4sugar.m4") - file(REMOVE_RECURSE "${PATHS}") - endif() else() set(PROGNAME bison) set(APT_PACKAGE_NAME bison) @@ -378,41 +373,48 @@ function(vcpkg_find_acquire_program VAR) message(FATAL_ERROR "Could not find ${PROGNAME}. Please install it via your package manager${EXAMPLE}") endif() - vcpkg_download_distfile(ARCHIVE_PATH - URLS ${URL} - SHA512 ${HASH} - FILENAME ${ARCHIVE} - ) - - set(PROG_PATH_SUBDIR "${DOWNLOADS}/tools/${PROGNAME}/${SUBDIR}") - file(MAKE_DIRECTORY ${PROG_PATH_SUBDIR}) - if(DEFINED NOEXTRACT) - if(DEFINED _vfa_RENAME) - file(INSTALL ${ARCHIVE_PATH} DESTINATION ${PROG_PATH_SUBDIR} RENAME ${_vfa_RENAME} FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) - else() - file(COPY ${ARCHIVE_PATH} DESTINATION ${PROG_PATH_SUBDIR} FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) - endif() + if(DEFINED SOURCEFORGE_ARGS) + # Locally change editable to suppress re-extraction each time + set(_VCPKG_EDITABLE 1) + vcpkg_from_sourceforge(OUT_SOURCE_PATH SFPATH ${SOURCEFORGE_ARGS}) + unset(_VCPKG_EDITABLE) else() - get_filename_component(ARCHIVE_EXTENSION ${ARCHIVE} LAST_EXT) - string(TOLOWER "${ARCHIVE_EXTENSION}" ARCHIVE_EXTENSION) - if(ARCHIVE_EXTENSION STREQUAL ".msi") - file(TO_NATIVE_PATH "${ARCHIVE_PATH}" ARCHIVE_NATIVE_PATH) - file(TO_NATIVE_PATH "${PROG_PATH_SUBDIR}" DESTINATION_NATIVE_PATH) - _execute_process( - COMMAND msiexec /a ${ARCHIVE_NATIVE_PATH} /qn TARGETDIR=${DESTINATION_NATIVE_PATH} - WORKING_DIRECTORY ${DOWNLOADS} - ) - elseif("${ARCHIVE_PATH}" MATCHES ".7z.exe$") - vcpkg_find_acquire_program(7Z) - _execute_process( - COMMAND ${7Z} x "${ARCHIVE_PATH}" "-o${PROG_PATH_SUBDIR}" -y -bso0 -bsp0 - WORKING_DIRECTORY ${PROG_PATH_SUBDIR} - ) + vcpkg_download_distfile(ARCHIVE_PATH + URLS ${URL} + SHA512 ${HASH} + FILENAME ${ARCHIVE} + ) + + set(PROG_PATH_SUBDIR "${DOWNLOADS}/tools/${PROGNAME}/${SUBDIR}") + file(MAKE_DIRECTORY ${PROG_PATH_SUBDIR}) + if(DEFINED NOEXTRACT) + if(DEFINED _vfa_RENAME) + file(INSTALL ${ARCHIVE_PATH} DESTINATION ${PROG_PATH_SUBDIR} RENAME ${_vfa_RENAME} FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) + else() + file(COPY ${ARCHIVE_PATH} DESTINATION ${PROG_PATH_SUBDIR} FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) + endif() else() - _execute_process( - COMMAND ${CMAKE_COMMAND} -E tar xzf ${ARCHIVE_PATH} - WORKING_DIRECTORY ${PROG_PATH_SUBDIR} - ) + get_filename_component(ARCHIVE_EXTENSION ${ARCHIVE} LAST_EXT) + string(TOLOWER "${ARCHIVE_EXTENSION}" ARCHIVE_EXTENSION) + if(ARCHIVE_EXTENSION STREQUAL ".msi") + file(TO_NATIVE_PATH "${ARCHIVE_PATH}" ARCHIVE_NATIVE_PATH) + file(TO_NATIVE_PATH "${PROG_PATH_SUBDIR}" DESTINATION_NATIVE_PATH) + _execute_process( + COMMAND msiexec /a ${ARCHIVE_NATIVE_PATH} /qn TARGETDIR=${DESTINATION_NATIVE_PATH} + WORKING_DIRECTORY ${DOWNLOADS} + ) + elseif("${ARCHIVE_PATH}" MATCHES ".7z.exe$") + vcpkg_find_acquire_program(7Z) + _execute_process( + COMMAND ${7Z} x "${ARCHIVE_PATH}" "-o${PROG_PATH_SUBDIR}" -y -bso0 -bsp0 + WORKING_DIRECTORY ${PROG_PATH_SUBDIR} + ) + else() + _execute_process( + COMMAND ${CMAKE_COMMAND} -E tar xzf ${ARCHIVE_PATH} + WORKING_DIRECTORY ${PROG_PATH_SUBDIR} + ) + endif() endif() endif() diff --git a/scripts/cmake/vcpkg_from_sourceforge.cmake b/scripts/cmake/vcpkg_from_sourceforge.cmake index 258499242..34b2a12b0 100644 --- a/scripts/cmake/vcpkg_from_sourceforge.cmake +++ b/scripts/cmake/vcpkg_from_sourceforge.cmake @@ -42,6 +42,11 @@ ## ### SHA512 ## The SHA512 hash that should match the archive. ## +## ### WORKING_DIRECTORY +## If specified, the archive will be extracted into the working directory instead of `${CURRENT_BUILDTREES_DIR}/src/`. +## +## Note that the archive will still be extracted into a subfolder underneath that directory (`${WORKING_DIRECTORY}/${REF}-${HASH}/`). +## ## ### PATCHES ## A list of patches to be applied to the extracted sources. ## @@ -61,7 +66,7 @@ function(vcpkg_from_sourceforge) set(booleanValueArgs DISABLE_SSL NO_REMOVE_ONE_LEVEL) - set(oneValueArgs OUT_SOURCE_PATH REPO REF SHA512 FILENAME) + set(oneValueArgs OUT_SOURCE_PATH REPO REF SHA512 FILENAME WORKING_DIRECTORY) set(multipleValuesArgs PATCHES) cmake_parse_arguments(_vdus "${booleanValueArgs}" "${oneValueArgs}" "${multipleValuesArgs}" ${ARGN}) @@ -77,6 +82,12 @@ function(vcpkg_from_sourceforge) message(FATAL_ERROR "The sourceforge repository must be specified.") endif() + if(DEFINED _vdus_WORKING_DIRECTORY) + set(WORKING_DIRECTORY WORKING_DIRECTORY "${_vdus_WORKING_DIRECTORY}") + else() + set(WORKING_DIRECTORY) + endif() + if (_vdus_DISABLE_SSL) set(URL_PROTOCOL http:) else() @@ -181,6 +192,7 @@ function(vcpkg_from_sourceforge) ARCHIVE "${ARCHIVE}" REF "${SANITIZED_REF}" ${NO_REMOVE_ONE_LEVEL} + ${WORKING_DIRECTORY} PATCHES ${_vdus_PATCHES} ) |
