diff options
Diffstat (limited to 'scripts/lib/ptxd_make_world_extract.sh')
-rw-r--r-- | scripts/lib/ptxd_make_world_extract.sh | 79 |
1 files changed, 77 insertions, 2 deletions
diff --git a/scripts/lib/ptxd_make_world_extract.sh b/scripts/lib/ptxd_make_world_extract.sh index 8ffa88bda..dbd246c0a 100644 --- a/scripts/lib/ptxd_make_world_extract.sh +++ b/scripts/lib/ptxd_make_world_extract.sh @@ -10,7 +10,7 @@ # # ptxd_make_world_extract # -ptxd_make_world_extract() { +ptxd_make_world_extract_impl() { ptxd_make_world_init || return if [ -z "${pkg_url}" -a -z "${pkg_src}" -o -z "${pkg_dir}" ]; then @@ -34,6 +34,7 @@ ptxd_make_world_extract() { echo "local directory using lndir" mkdir -p "${pkg_dir}" lndir "$(ptxd_abspath "${url}")" "${pkg_dir}" + rm -f "${pkg_dir}/compile_commands.json" return else ptxd_bailout "the URL '${pkg_url}' points to non existing directory." @@ -65,7 +66,7 @@ extract: pkg_extract_dir=$(ptxd_print_path ${pkg_dir})" local tmpdir tmpdir="$(mktemp -d "${pkg_dir}.XXXXXX")" - if ! ptxd_make_extract_archive "${pkg_src}" "${tmpdir}"; then + if ! ptxd_make_extract_archive "${pkg_src}" "${tmpdir}" "${pkg_src_filter}"; then rm -rf "${tmpdir}" ptxd_make_serialize_put ptxd_bailout "failed to extract '${pkg_src}'." @@ -86,5 +87,79 @@ extract: pkg_extract_dir=$(ptxd_print_path ${pkg_dir})" ptxd_make_serialize_put return ${ret} } +export -f ptxd_make_world_extract_impl + +ptxd_make_world_extract_cargo_crate() { + local tmp srcdir abs_srcdir dir name + + echo "extract: ${src}" + tmp="$(basename ${src%.crate})" + srcdir="${tmp%.git}" + abs_srcdir="${pkg_cargo_home}/source/${srcdir}" + mkdir "${abs_srcdir}" && + tar -C "${abs_srcdir}" --strip-components=1 -xf "${src}" || break + if grep -qi '^\[package\]$' "${abs_srcdir}/Cargo.toml"; then + if [ "${tmp}" = "${srcdir}" ]; then + # don't set the checksum for crates from git, they would trigger Cargo.lock changes + set -- $(sha256sum "${src}") + printf '{"files": {}, "package": "%s"}' "${1}" > "${abs_srcdir}/.cargo-checksum.json" + else + printf '{"files": {}, "package": null}' > "${abs_srcdir}/.cargo-checksum.json" + fi + return + fi + mv "${abs_srcdir}" "${pkg_cargo_home}/workspaces/" && + awk ' +/^members = \[$/ { + members = 1 + next +} +/\]$/ { + members = 0 +} +{ + if (members != 1) + next + dir = gensub(/"(.*)"[,]?/, "\\1", 1, $1) + name = gensub(/\//, "-", "g", dir) + print dir, name +}' "${pkg_cargo_home}/workspaces/${srcdir}/Cargo.toml" | while read dir name; do + ln -sf "../workspaces/${srcdir}/${dir}" "${pkg_cargo_home}/source/${name}" + printf '{"files": {}, "package": null}' > "${pkg_cargo_home}/source/${name}/.cargo-checksum.json" + mv "${pkg_cargo_home}/workspaces/${srcdir}/${dir}/Cargo.toml" \ + "${pkg_cargo_home}/workspaces/${srcdir}/${dir}/Cargo.toml.orig" + "${vendor_cargo_workspace_package}" \ + --input "${pkg_cargo_home}/workspaces/${srcdir}/${dir}/Cargo.toml.orig" \ + --output "${pkg_cargo_home}/workspaces/${srcdir}/${dir}/Cargo.toml" \ + --workspace "${pkg_cargo_home}/workspaces/${srcdir}/Cargo.toml" || return + done +} +export -f ptxd_make_world_extract_cargo_crate +ptxd_make_world_extract_cargo() { + local src vendor_cargo_workspace_package + echo "extract: cargo dependencies:" + ptxd_in_path PTXDIST_PATH_SCRIPTS vendor-cargo-workspace-package && + vendor_cargo_workspace_package="${ptxd_reply}" && + rm -rf "${pkg_cargo_home}" && + mkdir -p "${pkg_cargo_home}/source" && + mkdir -p "${pkg_cargo_home}/workspaces" && + for src in ${pkg_srcs}; do + case "${src}" in + *.crate) + ptxd_make_world_extract_cargo_crate || return + ;; + *) + ;; + esac + done +} +export -f ptxd_make_world_extract_cargo + +ptxd_make_world_extract() { + ptxd_make_world_extract_impl && + if [ "${pkg_conf_tool}" = "cargo" -o -n "${pkg_cargo_lock}" ]; then + ptxd_make_world_extract_cargo + fi +} export -f ptxd_make_world_extract |