From fe2b3f6800e7f8c242e0b0075542816c24cba037 Mon Sep 17 00:00:00 2001 From: Alexander Neumann <30894796+Neumann-A@users.noreply.github.com> Date: Thu, 9 May 2024 10:46:26 +0200 Subject: [PATCH 1/4] [vcpkg-downloads] Helper script to parse download.json --- ports/vcpkg-downloads/download.json | 55 +++++ ports/vcpkg-downloads/portfile.cmake | 20 ++ ports/vcpkg-downloads/vcpkg-downloads.cmake | 222 ++++++++++++++++++ ports/vcpkg-downloads/vcpkg-port-config.cmake | 1 + ports/vcpkg-downloads/vcpkg.json | 5 + 5 files changed, 303 insertions(+) create mode 100644 ports/vcpkg-downloads/download.json create mode 100644 ports/vcpkg-downloads/portfile.cmake create mode 100644 ports/vcpkg-downloads/vcpkg-downloads.cmake create mode 100644 ports/vcpkg-downloads/vcpkg-port-config.cmake create mode 100644 ports/vcpkg-downloads/vcpkg.json diff --git a/ports/vcpkg-downloads/download.json b/ports/vcpkg-downloads/download.json new file mode 100644 index 00000000000000..a3fd3902763acb --- /dev/null +++ b/ports/vcpkg-downloads/download.json @@ -0,0 +1,55 @@ +{ + "downloads" : [ + { + "output_variable" : "extracted_src_github", + "from": "github", + "repository" : "facebook/zstd", + "ref": "v1.5.6", + "sha512" : "ca12dffd86618ca008e1ecc79056c1129cb4e61668bf13a3cd5b2fa5c93bc9c92c80f64c1870c68b9c20009d9b3a834eac70db72242d5106125a1c53cccf8de8", + "head_ref": "dev", + "patches" : [], + "target_dir" : "${other_src_dir}/zstd" + }, + { + "output_variable" : "extracted_src_gitlab", + "from": "gitlab", + "host": "https://gitlab.com", + "repository" : "libeigen/eigen", + "ref": "3.4.0", + "sha512" : "ba75ecb760e32acf4ceaf27115468e65d4f77c44f8d519b5a13e7940af2c03a304ad433368cb6d55431f307c5c39e2666ab41d34442db3cf441638e51f5c3b6a", + "head_ref": "master", + "patches" : [], + "target_dir" : "${other_src_dir}/eigen" + }, + { + "output_variable" : "extracted_src_bitbucket", + "from": "bitbucket", + "repository" : "blaze-lib/blaze", + "ref": "v3.8.2", + "sha512" : "9786628159991f547902ceb44a159f0ba84d08be16ccc45bfb9aad3cfbf16eaede4ea43d2d4981d420a8a387a07721b113754f6038a6db2d9c7ed2ea967b5361", + "head_ref": "master", + "patches" : [], + "target_dir" : "${other_src_dir}/blaze" + }, + { + "output_variable" : "extracted_src_sourceforge", + "from": "sourceforge", + "repository" : "cunit/CUnit", + "ref": "2.1-3", + "filename": "CUnit-2.1-3.tar.bz2", + "sha512" : "547b417109332446dfab8fda17bf4ccd2da841dc93f824dc90a20635bcf1fb80fb2176500d8a0906940f3f3d3e2f77b2d70a71090c9ab84ad9af43f3582bc487", + "patches" : [], + "target_dir" : "${other_src_dir}/cunit" + }, + { + "output_variable" : "extracted_src_git", + "from": "git", + "url" : "https://repo.or.cz/libtar.git", + "ref": "6d0ab4c78e7a8305c36a0c3d63fd25cd1493de65", + "sha512" : "0", + "patches" : [], + "target_dir" : "${other_src_dir}/libtar" + } + + ] +} \ No newline at end of file diff --git a/ports/vcpkg-downloads/portfile.cmake b/ports/vcpkg-downloads/portfile.cmake new file mode 100644 index 00000000000000..5c93968c928cdd --- /dev/null +++ b/ports/vcpkg-downloads/portfile.cmake @@ -0,0 +1,20 @@ +file(INSTALL + "${CMAKE_CURRENT_LIST_DIR}/vcpkg-downloads.cmake" + "${CMAKE_CURRENT_LIST_DIR}/vcpkg-port-config.cmake" + DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}") + +vcpkg_install_copyright(FILE_LIST "${VCPKG_ROOT_DIR}/LICENSE.txt") +set(VCPKG_POLICY_CMAKE_HELPER_PORT enabled) + +block() + set(other_src_dir "${CURRENT_BUILDTREES_DIR}/src2") + include("${CMAKE_CURRENT_LIST_DIR}/vcpkg-downloads.cmake") + vcpkg_download_from_json(JSONS "${CMAKE_CURRENT_LIST_DIR}/download.json") + message(STATUS "extracted_src_github:${extracted_src_github}") + message(STATUS "extracted_src_gitlab:${extracted_src_gitlab}") + message(STATUS "extracted_src_bitbucket:${extracted_src_bitbucket}") + message(STATUS "extracted_src_sourceforge:${extracted_src_sourceforge}") + message(STATUS "extracted_src_git:${extracted_src_git}") +endblock() + +message(FATAL_ERROR) \ No newline at end of file diff --git a/ports/vcpkg-downloads/vcpkg-downloads.cmake b/ports/vcpkg-downloads/vcpkg-downloads.cmake new file mode 100644 index 00000000000000..d0ef60b3b37e97 --- /dev/null +++ b/ports/vcpkg-downloads/vcpkg-downloads.cmake @@ -0,0 +1,222 @@ +include_guard(GLOBAL) + +function(vcpkg_download_from_json) + cmake_parse_arguments(PARSE_ARGV 0 "arg" "" "" "JSONS") + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "vcpkg_cmake_install was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + + if(NOT arg_JSONS) + list(APPEND arg_JSONS "${CMAKE_CURRENT_LIST_DIR}/download.json") + endif() + + foreach(json IN LISTS arg_JSONS) + z_vcpkg_download_from_json(vars "${json}") + endforeach() + + foreach(o IN LISTS vars) + set("${o}" "${${o}}" PARENT_SCOPE) + endforeach() +endfunction() + +function(z_vcpkg_download_from_json outs json_file) + file(READ "${json_file}" json_data) + z_read_json_member(outvars "${json_data}" "downloads") + foreach(o IN LISTS outvars) + message("${o}=${${o}}") + endforeach() + + set(out "") + + foreach(download_item IN LISTS downloads.index_list) + set(prefix downloads.${download_item}) + foreach(member IN LISTS ${prefix}.members) # Expand all CMake variables in members + string(CONFIGURE "${${prefix}.${member}}" "${prefix}.${member}" ESCAPE_QUOTES) + endforeach() + + cmake_language(CALL z_vcpkg_download_from_${${prefix}.from} "${prefix}") + list(APPEND out "${${prefix}.output_variable}") + + if(${prefix}.target_dir) # Check --editable? + file(REMOVE_RECURSE ${${prefix}.target_dir}) + # Would like to use rename here ? + file(COPY "${${${prefix}.output_variable}}/" DESTINATION "${${prefix}.target_dir}") + set("${${prefix}.output_variable}" "${${prefix}.target_dir}" PARENT_SCOPE) + endif() + + endforeach() + set(${outs} ${${outs}} ${out} PARENT_SCOPE) +endfunction() + +##### Download stuff + +function(z_vcpkg_download_from_github data_prefix) + set(opts "") + if(${data_prefix}.host) + list(APPEND opts GITHUB_HOST "${${data_prefix}.host}") + endif() + + vcpkg_from_github( + OUT_SOURCE_PATH "${${data_prefix}.output_variable}" + REPO "${${data_prefix}.repository}" + REF "${${data_prefix}.ref}" + SHA512 "${${data_prefix}.sha512}" + HEAD_REF "${${data_prefix}.head_ref}" + PATCHES ${${data_prefix}.patches} + ${opts} + ) + set("${${data_prefix}.output_variable}" "${${${data_prefix}.output_variable}}" PARENT_SCOPE) +endfunction() + +function(z_vcpkg_download_from_gitlab data_prefix) + set(opts "") + if(${data_prefix}.host) + list(APPEND opts GITLAB_URL "${${data_prefix}.host}") + endif() + + vcpkg_from_gitlab( + OUT_SOURCE_PATH "${${data_prefix}.output_variable}" + REPO "${${data_prefix}.repository}" + REF "${${data_prefix}.ref}" + SHA512 "${${data_prefix}.sha512}" + HEAD_REF "${${data_prefix}.head_ref}" + PATCHES ${${data_prefix}.patches} + ${opts} + ) + set("${${data_prefix}.output_variable}" "${${${data_prefix}.output_variable}}" PARENT_SCOPE) +endfunction() + +function(z_vcpkg_download_from_bitbucket data_prefix) + vcpkg_from_bitbucket( + OUT_SOURCE_PATH "${${data_prefix}.output_variable}" + REPO "${${data_prefix}.repository}" + REF "${${data_prefix}.ref}" + SHA512 "${${data_prefix}.sha512}" + HEAD_REF "${${data_prefix}.head_ref}" + PATCHES ${${data_prefix}.patches} + ) + set("${${data_prefix}.output_variable}" "${${${data_prefix}.output_variable}}" PARENT_SCOPE) +endfunction() + +function(z_vcpkg_download_from_git data_prefix) + vcpkg_from_git( + OUT_SOURCE_PATH "${${data_prefix}.output_variable}" + URL "${${data_prefix}.url}" + REF "${${data_prefix}.ref}" + #SHA512 "${${data_prefix}.sha512}" + HEAD_REF "${${data_prefix}.head_ref}" + PATCHES ${${data_prefix}.patches} + # [LFS []] + ) + set("${${data_prefix}.output_variable}" "${${${data_prefix}.output_variable}}" PARENT_SCOPE) +endfunction() + +function(z_vcpkg_download_from_sourceforge data_prefix) + vcpkg_from_sourceforge( + OUT_SOURCE_PATH "${${data_prefix}.output_variable}" + REPO "${${data_prefix}.repository}" + REF "${${data_prefix}.ref}" + SHA512 "${${data_prefix}.sha512}" + #HEAD_REF "${${data_prefix}.head_ref}" + PATCHES ${${data_prefix}.patches} + FILENAME "${${data_prefix}.filename}" + #[NO_REMOVE_ONE_LEVEL] + ) + set("${${data_prefix}.output_variable}" "${${${data_prefix}.output_variable}}" PARENT_SCOPE) +endfunction() + +function(z_vcpkg_download_from_file data_prefix) +endfunction() + +##### JSON Parser + +function(z_read_json_array out_vars json_data) + set(out "") + set(argn_list ${ARGN}) + list(JOIN argn_list "." argn_list_dot) + + string(JSON ${argn_list_dot}_length LENGTH "${json_data}" ${ARGN}) + set(${argn_list_dot}.size "${${argn_list_dot}_length}") + list(APPEND out ${argn_list_dot}.size) + set(${argn_list_dot}.index_list "") + list(APPEND out ${argn_list_dot}.index_list) + + math(EXPR ${argn_list_dot}_length "${${argn_list_dot}_length}-1" OUTPUT_FORMAT DECIMAL) + + if(NOT ${argn_list_dot}_length LESS 0) + foreach(${argn_list_dot}_index RANGE ${${argn_list_dot}_length}) + set(out_index "") + z_read_json_member(out_index "${json_data}" ${ARGN} "${${argn_list_dot}_index}") + list(APPEND out ${out_index}) + list(APPEND ${argn_list_dot}.index_list "${${argn_list_dot}_index}") + unset(out_index) + endforeach() + endif() + + foreach(o IN LISTS out) + set("${o}" "${${o}}" PARENT_SCOPE) + endforeach() + set("${out_vars}" ${out} PARENT_SCOPE) +endfunction() + +function(z_read_json_obj out_vars json_data) + set(out "") + set(argn_list ${ARGN}) + list(JOIN argn_list "." argn_list_dot) + + string(JSON ${argn_list_dot}_length LENGTH "${json_data}" ${ARGN}) + set(${argn_list_dot}.size "${${argn_list_dot}_length}") + list(APPEND out ${argn_list_dot}.size) + set(${argn_list_dot}.members "") + list(APPEND out ${argn_list_dot}.members) + + math(EXPR ${argn_list_dot}_length "${${argn_list_dot}_length}-1" OUTPUT_FORMAT DECIMAL) + + if(NOT ${argn_list_dot}_length LESS 0) + foreach(${argn_list_dot}_index RANGE ${${argn_list_dot}_length}) + set(out_index "") + string(JSON member_name MEMBER "${json_data}" ${ARGN} "${${argn_list_dot}_index}") + z_read_json_member(out_index "${json_data}" ${ARGN} "${member_name}") + list(APPEND out ${out_index}) + list(APPEND ${argn_list_dot}.members "${member_name}") + unset(out_index) + unset(member_name) + endforeach() + endif() + foreach(o IN LISTS out) + set("${o}" "${${o}}" PARENT_SCOPE) + endforeach() + set("${out_vars}" ${out} PARENT_SCOPE) +endfunction() + +function(z_read_json_member out_vars json_data) + set(out "") + set(argn_list ${ARGN}) + message(STATUS "${ARGN}") + list(JOIN argn_list "." argn_list_dot) + string(JSON "z_${argn_list_dot}.json_type" TYPE "${json_data}" ${ARGN}) + + if("${z_${argn_list_dot}.json_type}" MATCHES "^(NULL|NUMBER|STRING|BOOLEAN)$") + string(JSON "${argn_list_dot}" GET "${json_data}" ${ARGN}) + # Cannot expand CMake variables here if you want output variables to be used in the same JSON file + # string(CONFIGURE "${${argn_list_dot}}" "${argn_list_dot}" ESCAPE_QUOTES) + list(APPEND out "${argn_list_dot}") + elseif("${z_${argn_list_dot}.json_type}" STREQUAL "ARRAY") + set(array_out "") + z_read_json_array(array_out "${json_data}" ${ARGN}) + list(APPEND out ${array_out}) + unset(array_out) + elseif("${z_${argn_list_dot}.json_type}" STREQUAL "OBJECT") + set(object_out "") + z_read_json_obj(object_out "${json_data}" ${ARGN}) + list(APPEND out ${object_out}) + unset(object_out) + else() + message(FATAL_ERROR "Unknown json type found") + endif() + + foreach(o IN LISTS out) + set("${o}" "${${o}}" PARENT_SCOPE) + endforeach() + set("${out_vars}" ${out} PARENT_SCOPE) +endfunction() \ No newline at end of file diff --git a/ports/vcpkg-downloads/vcpkg-port-config.cmake b/ports/vcpkg-downloads/vcpkg-port-config.cmake new file mode 100644 index 00000000000000..59c0f803d6545d --- /dev/null +++ b/ports/vcpkg-downloads/vcpkg-port-config.cmake @@ -0,0 +1 @@ +include("${CMAKE_CURRENT_LIST_DIR}/vcpkg-downloads.cmake") diff --git a/ports/vcpkg-downloads/vcpkg.json b/ports/vcpkg-downloads/vcpkg.json new file mode 100644 index 00000000000000..39756a050f0cd3 --- /dev/null +++ b/ports/vcpkg-downloads/vcpkg.json @@ -0,0 +1,5 @@ +{ + "name": "vcpkg-downloads", + "version-date": "2024-05-07", + "license": "MIT" +} From 0829512b636400483f55654cba622d59ff5d24a7 Mon Sep 17 00:00:00 2001 From: Alexander Neumann <30894796+Neumann-A@users.noreply.github.com> Date: Thu, 9 May 2024 19:03:28 +0200 Subject: [PATCH 2/4] add vcpkg_download_distfile support and fix patches --- ports/vcpkg-downloads/download.json | 9 ++++ ports/vcpkg-downloads/vcpkg-downloads.cmake | 47 +++++++++++++++++---- 2 files changed, 47 insertions(+), 9 deletions(-) diff --git a/ports/vcpkg-downloads/download.json b/ports/vcpkg-downloads/download.json index a3fd3902763acb..cbfc52a60b19b8 100644 --- a/ports/vcpkg-downloads/download.json +++ b/ports/vcpkg-downloads/download.json @@ -49,6 +49,15 @@ "sha512" : "0", "patches" : [], "target_dir" : "${other_src_dir}/libtar" + }, + { + "output_variable" : "extracted_src_file", + "from": "url", + "urls" : [ "https://archive.apache.org/dist/apr/apr-1.7.4.tar.bz2" ], + "filename" : "apr-1.7.4.tar.bz2", + "sha512" : "2342c997765ea2ca96eac158e5fd260232dba68fc41b90a79a7ba9b25c539fc217981867362090e0ebebe632289257c342275e3c5baedb698c474ef8f49a9dcd", + "patches" : [], + "target_dir" : "${other_src_dir}/libtar" } ] diff --git a/ports/vcpkg-downloads/vcpkg-downloads.cmake b/ports/vcpkg-downloads/vcpkg-downloads.cmake index d0ef60b3b37e97..c30591aef3b793 100644 --- a/ports/vcpkg-downloads/vcpkg-downloads.cmake +++ b/ports/vcpkg-downloads/vcpkg-downloads.cmake @@ -49,6 +49,24 @@ function(z_vcpkg_download_from_json outs json_file) endfunction() ##### Download stuff +function(z_vcpkg_download_from_url data_prefix) + z_vcpkg_convert_json_array_to_cmake_list(urls ${data_prefix}.urls) + z_vcpkg_convert_json_array_to_cmake_list(patches "${data_prefix}.patches") + + vcpkg_download_distfile(archive + URLS "${urls}" + FILENAME "${${data_prefix}.filename}" + SHA512 "${${data_prefix}.sha512}" + ) + + vcpkg_extract_source_archive("${${data_prefix}.output_variable}" + ARCHIVE "${archive}" + PATCHES ${patches} + ) + unset(archive) + + set("${${data_prefix}.output_variable}" "${${${data_prefix}.output_variable}}" PARENT_SCOPE) +endfunction() function(z_vcpkg_download_from_github data_prefix) set(opts "") @@ -56,13 +74,15 @@ function(z_vcpkg_download_from_github data_prefix) list(APPEND opts GITHUB_HOST "${${data_prefix}.host}") endif() + z_vcpkg_convert_json_array_to_cmake_list(patches "${data_prefix}.patches") + vcpkg_from_github( OUT_SOURCE_PATH "${${data_prefix}.output_variable}" REPO "${${data_prefix}.repository}" REF "${${data_prefix}.ref}" SHA512 "${${data_prefix}.sha512}" HEAD_REF "${${data_prefix}.head_ref}" - PATCHES ${${data_prefix}.patches} + PATCHES ${patches} ${opts} ) set("${${data_prefix}.output_variable}" "${${${data_prefix}.output_variable}}" PARENT_SCOPE) @@ -74,60 +94,61 @@ function(z_vcpkg_download_from_gitlab data_prefix) list(APPEND opts GITLAB_URL "${${data_prefix}.host}") endif() + z_vcpkg_convert_json_array_to_cmake_list(patches "${data_prefix}.patches") + vcpkg_from_gitlab( OUT_SOURCE_PATH "${${data_prefix}.output_variable}" REPO "${${data_prefix}.repository}" REF "${${data_prefix}.ref}" SHA512 "${${data_prefix}.sha512}" HEAD_REF "${${data_prefix}.head_ref}" - PATCHES ${${data_prefix}.patches} + PATCHES ${patches} ${opts} ) set("${${data_prefix}.output_variable}" "${${${data_prefix}.output_variable}}" PARENT_SCOPE) endfunction() function(z_vcpkg_download_from_bitbucket data_prefix) + z_vcpkg_convert_json_array_to_cmake_list(patches "${data_prefix}.patches") vcpkg_from_bitbucket( OUT_SOURCE_PATH "${${data_prefix}.output_variable}" REPO "${${data_prefix}.repository}" REF "${${data_prefix}.ref}" SHA512 "${${data_prefix}.sha512}" HEAD_REF "${${data_prefix}.head_ref}" - PATCHES ${${data_prefix}.patches} + PATCHES ${patches} ) set("${${data_prefix}.output_variable}" "${${${data_prefix}.output_variable}}" PARENT_SCOPE) endfunction() function(z_vcpkg_download_from_git data_prefix) + z_vcpkg_convert_json_array_to_cmake_list(patches "${data_prefix}.patches") vcpkg_from_git( OUT_SOURCE_PATH "${${data_prefix}.output_variable}" URL "${${data_prefix}.url}" REF "${${data_prefix}.ref}" #SHA512 "${${data_prefix}.sha512}" HEAD_REF "${${data_prefix}.head_ref}" - PATCHES ${${data_prefix}.patches} + PATCHES ${patches} # [LFS []] ) set("${${data_prefix}.output_variable}" "${${${data_prefix}.output_variable}}" PARENT_SCOPE) endfunction() function(z_vcpkg_download_from_sourceforge data_prefix) + z_vcpkg_convert_json_array_to_cmake_list(patches "${data_prefix}.patches") vcpkg_from_sourceforge( OUT_SOURCE_PATH "${${data_prefix}.output_variable}" REPO "${${data_prefix}.repository}" REF "${${data_prefix}.ref}" SHA512 "${${data_prefix}.sha512}" #HEAD_REF "${${data_prefix}.head_ref}" - PATCHES ${${data_prefix}.patches} + PATCHES ${patches} FILENAME "${${data_prefix}.filename}" #[NO_REMOVE_ONE_LEVEL] ) set("${${data_prefix}.output_variable}" "${${${data_prefix}.output_variable}}" PARENT_SCOPE) endfunction() - -function(z_vcpkg_download_from_file data_prefix) -endfunction() - ##### JSON Parser function(z_read_json_array out_vars json_data) @@ -219,4 +240,12 @@ function(z_read_json_member out_vars json_data) set("${o}" "${${o}}" PARENT_SCOPE) endforeach() set("${out_vars}" ${out} PARENT_SCOPE) +endfunction() + +function(z_vcpkg_convert_json_array_to_cmake_list var prefix) + set(out "") + foreach(item IN LISTS ${prefix}.index_list) + list(APPEND out "${${prefix}.${item}}") + endforeach() + set("${var}" "${out}" PARENT_SCOPE) endfunction() \ No newline at end of file From 555a341b9418874c8f4b3ef1fcd05c06b4bb2186 Mon Sep 17 00:00:00 2001 From: Alexander Neumann <30894796+Neumann-A@users.noreply.github.com> Date: Thu, 9 May 2024 20:29:51 +0200 Subject: [PATCH 3/4] Use - instead of _ Rename target-dir to copy-to --- ports/vcpkg-downloads/download.json | 30 ++++++------ ports/vcpkg-downloads/vcpkg-downloads.cmake | 51 +++++++++++---------- 2 files changed, 41 insertions(+), 40 deletions(-) diff --git a/ports/vcpkg-downloads/download.json b/ports/vcpkg-downloads/download.json index cbfc52a60b19b8..f83fde8dfd22ae 100644 --- a/ports/vcpkg-downloads/download.json +++ b/ports/vcpkg-downloads/download.json @@ -1,63 +1,63 @@ { "downloads" : [ { - "output_variable" : "extracted_src_github", + "output-variable" : "extracted_src_github", "from": "github", "repository" : "facebook/zstd", "ref": "v1.5.6", "sha512" : "ca12dffd86618ca008e1ecc79056c1129cb4e61668bf13a3cd5b2fa5c93bc9c92c80f64c1870c68b9c20009d9b3a834eac70db72242d5106125a1c53cccf8de8", - "head_ref": "dev", + "head-ref": "dev", "patches" : [], - "target_dir" : "${other_src_dir}/zstd" + "copy-to" : "${other_src_dir}/zstd" }, { - "output_variable" : "extracted_src_gitlab", + "output-variable" : "extracted_src_gitlab", "from": "gitlab", "host": "https://gitlab.com", "repository" : "libeigen/eigen", "ref": "3.4.0", "sha512" : "ba75ecb760e32acf4ceaf27115468e65d4f77c44f8d519b5a13e7940af2c03a304ad433368cb6d55431f307c5c39e2666ab41d34442db3cf441638e51f5c3b6a", - "head_ref": "master", + "head-ref": "master", "patches" : [], - "target_dir" : "${other_src_dir}/eigen" + "copy-to" : "${other_src_dir}/eigen" }, { - "output_variable" : "extracted_src_bitbucket", + "output-variable" : "extracted_src_bitbucket", "from": "bitbucket", "repository" : "blaze-lib/blaze", "ref": "v3.8.2", "sha512" : "9786628159991f547902ceb44a159f0ba84d08be16ccc45bfb9aad3cfbf16eaede4ea43d2d4981d420a8a387a07721b113754f6038a6db2d9c7ed2ea967b5361", - "head_ref": "master", + "head-ref": "master", "patches" : [], - "target_dir" : "${other_src_dir}/blaze" + "copy-to" : "${other_src_dir}/blaze" }, { - "output_variable" : "extracted_src_sourceforge", + "output-variable" : "extracted_src_sourceforge", "from": "sourceforge", "repository" : "cunit/CUnit", "ref": "2.1-3", "filename": "CUnit-2.1-3.tar.bz2", "sha512" : "547b417109332446dfab8fda17bf4ccd2da841dc93f824dc90a20635bcf1fb80fb2176500d8a0906940f3f3d3e2f77b2d70a71090c9ab84ad9af43f3582bc487", "patches" : [], - "target_dir" : "${other_src_dir}/cunit" + "copy-to" : "${other_src_dir}/cunit" }, { - "output_variable" : "extracted_src_git", + "output-variable" : "extracted_src_git", "from": "git", "url" : "https://repo.or.cz/libtar.git", "ref": "6d0ab4c78e7a8305c36a0c3d63fd25cd1493de65", "sha512" : "0", "patches" : [], - "target_dir" : "${other_src_dir}/libtar" + "copy-to" : "${other_src_dir}/libtar" }, { - "output_variable" : "extracted_src_file", + "output-variable" : "extracted_src_file", "from": "url", "urls" : [ "https://archive.apache.org/dist/apr/apr-1.7.4.tar.bz2" ], "filename" : "apr-1.7.4.tar.bz2", "sha512" : "2342c997765ea2ca96eac158e5fd260232dba68fc41b90a79a7ba9b25c539fc217981867362090e0ebebe632289257c342275e3c5baedb698c474ef8f49a9dcd", "patches" : [], - "target_dir" : "${other_src_dir}/libtar" + "copy-to" : "${other_src_dir}/libtar" } ] diff --git a/ports/vcpkg-downloads/vcpkg-downloads.cmake b/ports/vcpkg-downloads/vcpkg-downloads.cmake index c30591aef3b793..e33407bbd51f9b 100644 --- a/ports/vcpkg-downloads/vcpkg-downloads.cmake +++ b/ports/vcpkg-downloads/vcpkg-downloads.cmake @@ -22,9 +22,10 @@ endfunction() function(z_vcpkg_download_from_json outs json_file) file(READ "${json_file}" json_data) z_read_json_member(outvars "${json_data}" "downloads") - foreach(o IN LISTS outvars) - message("${o}=${${o}}") - endforeach() + + #foreach(o IN LISTS outvars) + # message("${o}=${${o}}") + #endforeach() set(out "") @@ -35,13 +36,13 @@ function(z_vcpkg_download_from_json outs json_file) endforeach() cmake_language(CALL z_vcpkg_download_from_${${prefix}.from} "${prefix}") - list(APPEND out "${${prefix}.output_variable}") + list(APPEND out "${${prefix}.output-variable}") - if(${prefix}.target_dir) # Check --editable? - file(REMOVE_RECURSE ${${prefix}.target_dir}) + if(${prefix}.copy-to) # Check --editable? + file(REMOVE_RECURSE ${${prefix}.copy-to}) # Would like to use rename here ? - file(COPY "${${${prefix}.output_variable}}/" DESTINATION "${${prefix}.target_dir}") - set("${${prefix}.output_variable}" "${${prefix}.target_dir}" PARENT_SCOPE) + file(COPY "${${${prefix}.output-variable}}/" DESTINATION "${${prefix}.copy-to}") + set("${${prefix}.output-variable}" "${${prefix}.copy-to}" PARENT_SCOPE) endif() endforeach() @@ -59,13 +60,13 @@ function(z_vcpkg_download_from_url data_prefix) SHA512 "${${data_prefix}.sha512}" ) - vcpkg_extract_source_archive("${${data_prefix}.output_variable}" + vcpkg_extract_source_archive("${${data_prefix}.output-variable}" ARCHIVE "${archive}" PATCHES ${patches} ) unset(archive) - set("${${data_prefix}.output_variable}" "${${${data_prefix}.output_variable}}" PARENT_SCOPE) + set("${${data_prefix}.output-variable}" "${${${data_prefix}.output-variable}}" PARENT_SCOPE) endfunction() function(z_vcpkg_download_from_github data_prefix) @@ -77,15 +78,15 @@ function(z_vcpkg_download_from_github data_prefix) z_vcpkg_convert_json_array_to_cmake_list(patches "${data_prefix}.patches") vcpkg_from_github( - OUT_SOURCE_PATH "${${data_prefix}.output_variable}" + OUT_SOURCE_PATH "${${data_prefix}.output-variable}" REPO "${${data_prefix}.repository}" REF "${${data_prefix}.ref}" SHA512 "${${data_prefix}.sha512}" - HEAD_REF "${${data_prefix}.head_ref}" + HEAD_REF "${${data_prefix}.head-ref}" PATCHES ${patches} ${opts} ) - set("${${data_prefix}.output_variable}" "${${${data_prefix}.output_variable}}" PARENT_SCOPE) + set("${${data_prefix}.output-variable}" "${${${data_prefix}.output-variable}}" PARENT_SCOPE) endfunction() function(z_vcpkg_download_from_gitlab data_prefix) @@ -97,57 +98,57 @@ function(z_vcpkg_download_from_gitlab data_prefix) z_vcpkg_convert_json_array_to_cmake_list(patches "${data_prefix}.patches") vcpkg_from_gitlab( - OUT_SOURCE_PATH "${${data_prefix}.output_variable}" + OUT_SOURCE_PATH "${${data_prefix}.output-variable}" REPO "${${data_prefix}.repository}" REF "${${data_prefix}.ref}" SHA512 "${${data_prefix}.sha512}" - HEAD_REF "${${data_prefix}.head_ref}" + HEAD_REF "${${data_prefix}.head-ref}" PATCHES ${patches} ${opts} ) - set("${${data_prefix}.output_variable}" "${${${data_prefix}.output_variable}}" PARENT_SCOPE) + set("${${data_prefix}.output-variable}" "${${${data_prefix}.output-variable}}" PARENT_SCOPE) endfunction() function(z_vcpkg_download_from_bitbucket data_prefix) z_vcpkg_convert_json_array_to_cmake_list(patches "${data_prefix}.patches") vcpkg_from_bitbucket( - OUT_SOURCE_PATH "${${data_prefix}.output_variable}" + OUT_SOURCE_PATH "${${data_prefix}.output-variable}" REPO "${${data_prefix}.repository}" REF "${${data_prefix}.ref}" SHA512 "${${data_prefix}.sha512}" - HEAD_REF "${${data_prefix}.head_ref}" + HEAD_REF "${${data_prefix}.head-ref}" PATCHES ${patches} ) - set("${${data_prefix}.output_variable}" "${${${data_prefix}.output_variable}}" PARENT_SCOPE) + set("${${data_prefix}.output-variable}" "${${${data_prefix}.output-variable}}" PARENT_SCOPE) endfunction() function(z_vcpkg_download_from_git data_prefix) z_vcpkg_convert_json_array_to_cmake_list(patches "${data_prefix}.patches") vcpkg_from_git( - OUT_SOURCE_PATH "${${data_prefix}.output_variable}" + OUT_SOURCE_PATH "${${data_prefix}.output-variable}" URL "${${data_prefix}.url}" REF "${${data_prefix}.ref}" #SHA512 "${${data_prefix}.sha512}" - HEAD_REF "${${data_prefix}.head_ref}" + HEAD_REF "${${data_prefix}.head-ref}" PATCHES ${patches} # [LFS []] ) - set("${${data_prefix}.output_variable}" "${${${data_prefix}.output_variable}}" PARENT_SCOPE) + set("${${data_prefix}.output-variable}" "${${${data_prefix}.output-variable}}" PARENT_SCOPE) endfunction() function(z_vcpkg_download_from_sourceforge data_prefix) z_vcpkg_convert_json_array_to_cmake_list(patches "${data_prefix}.patches") vcpkg_from_sourceforge( - OUT_SOURCE_PATH "${${data_prefix}.output_variable}" + OUT_SOURCE_PATH "${${data_prefix}.output-variable}" REPO "${${data_prefix}.repository}" REF "${${data_prefix}.ref}" SHA512 "${${data_prefix}.sha512}" - #HEAD_REF "${${data_prefix}.head_ref}" + #HEAD_REF "${${data_prefix}.head-ref}" PATCHES ${patches} FILENAME "${${data_prefix}.filename}" #[NO_REMOVE_ONE_LEVEL] ) - set("${${data_prefix}.output_variable}" "${${${data_prefix}.output_variable}}" PARENT_SCOPE) + set("${${data_prefix}.output-variable}" "${${${data_prefix}.output-variable}}" PARENT_SCOPE) endfunction() ##### JSON Parser From 1e0bc30c2687db3630b613ec47487ca05742ed65 Mon Sep 17 00:00:00 2001 From: Alexander Neumann <30894796+Neumann-A@users.noreply.github.com> Date: Thu, 9 May 2024 20:33:35 +0200 Subject: [PATCH 4/4] add "if" field --- ports/vcpkg-downloads/download.json | 2 ++ ports/vcpkg-downloads/vcpkg-downloads.cmake | 8 +++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/ports/vcpkg-downloads/download.json b/ports/vcpkg-downloads/download.json index f83fde8dfd22ae..257a72556c22f7 100644 --- a/ports/vcpkg-downloads/download.json +++ b/ports/vcpkg-downloads/download.json @@ -11,6 +11,7 @@ "copy-to" : "${other_src_dir}/zstd" }, { + "if": "VCPKG_TARGET_IS_OSX", "output-variable" : "extracted_src_gitlab", "from": "gitlab", "host": "https://gitlab.com", @@ -32,6 +33,7 @@ "copy-to" : "${other_src_dir}/blaze" }, { + "if": "VCPKG_TARGET_IS_LINUX", "output-variable" : "extracted_src_sourceforge", "from": "sourceforge", "repository" : "cunit/CUnit", diff --git a/ports/vcpkg-downloads/vcpkg-downloads.cmake b/ports/vcpkg-downloads/vcpkg-downloads.cmake index e33407bbd51f9b..9edca1ebb549b8 100644 --- a/ports/vcpkg-downloads/vcpkg-downloads.cmake +++ b/ports/vcpkg-downloads/vcpkg-downloads.cmake @@ -35,6 +35,12 @@ function(z_vcpkg_download_from_json outs json_file) string(CONFIGURE "${${prefix}.${member}}" "${prefix}.${member}" ESCAPE_QUOTES) endforeach() + if(DEFINED ${prefix}.if AND NOT "${${prefix}.if}" STREQUAL "") + if(NOT ${${prefix}.if}) + continue() + endif() + endif() + cmake_language(CALL z_vcpkg_download_from_${${prefix}.from} "${prefix}") list(APPEND out "${${prefix}.output-variable}") @@ -214,7 +220,7 @@ endfunction() function(z_read_json_member out_vars json_data) set(out "") set(argn_list ${ARGN}) - message(STATUS "${ARGN}") + list(JOIN argn_list "." argn_list_dot) string(JSON "z_${argn_list_dot}.json_type" TYPE "${json_data}" ${ARGN})