diff --git a/.forgejo/bin/build.sh b/.forgejo/bin/build.sh index 445929f..d9e327f 100755 --- a/.forgejo/bin/build.sh +++ b/.forgejo/bin/build.sh @@ -7,7 +7,7 @@ set -eu -o pipefail readonly APORTSDIR=$CI_PROJECT_DIR -readonly REPOS="backports user pmos" +readonly REPOS="backports user" readonly ALPINE_REPOS="main community testing" readonly ARCH=$(apk --print-arch) # gitlab variables @@ -16,8 +16,6 @@ readonly BASEBRANCH=$CI_MERGE_REQUEST_TARGET_BRANCH_NAME : "${REPODEST:=$HOME/packages}" : "${MIRROR:=https://ayakael.net/api/packages/forge/alpine}" : "${ALPINE_MIRROR:=http://dl-cdn.alpinelinux.org/alpine}" -: "${PMOS_MIRROR:=http://mirror.postmarketos.org/postmarketos}" -: "${PMOS_KEY:=https://git.syndicate-lang.org/synit/pmbootstrap/raw/commit/8efee86388408c0d8de45c64fe383580ffd91700/pmb/data/keys/build.postmarketos.org.rsa.pub}" : "${MAX_ARTIFACT_SIZE:=300000000}" #300M : "${CI_DEBUG_BUILD:=}" @@ -139,22 +137,6 @@ setup_system() { git config --global init.defaultBranch master } -setup_pmos() { - local release - - case $BASEBRANCH in - v3.21) release="v24.12";; - v3.20) release="v24.6";; - v3.19) release="v23.12";; - edge) release=master;; - *) die "Branch \"$BASEBRANCH\" not supported!" - esac - - doas wget "$PMOS_KEY" -P /etc/apk/keys - doas sh -c "echo $PMOS_MIRROR/$release >> /etc/apk/repositories" - doas apk update || true -} - sysinfo() { printf ">>> Host system information (arch: %s, release: %s) <<<\n" "$ARCH" "$(get_release)" printf "- Number of Cores: %s\n" "$(nproc)" @@ -162,7 +144,6 @@ sysinfo() { printf "- Free space: %s\n" "$(df -hP / | awk '/\/$/ {print $4}')" } - copy_artifacts() { cd "$APORTSDIR" @@ -201,7 +182,7 @@ setup_system || die "Failed to setup system" # git no longer allows to execute in repositories owned by different users doas chown -R buildozer: . -fetch_flags="-qnu" +fetch_flags="-qn" debugging && fetch_flags="-v" git fetch $fetch_flags "$CI_MERGE_REQUEST_PROJECT_URL" \ @@ -223,7 +204,6 @@ build_limit=$CI_ALPINE_BUILD_LIMIT for repo in $(changed_repos); do set_repositories_for "$repo" - [ "$repo" == "pmos" ] && setup_pmos built_aports=0 changed_aports_in_repo=$(changed_aports "$repo") changed_aports_in_repo_count=$(echo "$changed_aports_in_repo" | wc -l) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh deleted file mode 100755 index ee9ed3c..0000000 --- a/.forgejo/bin/check_ver.sh +++ /dev/null @@ -1,197 +0,0 @@ -#!/bin/bash - -# expects the following env variables: -# downstream: downstream repo -# -# env variables to track minor or bug-fix updates -# minor_only: array of packages that should only track minor releases (seperate by space) -# default: none -# all packages: all -# fix_only: array of packages that should only track bug fix releases (seperated by space) -# default: none -# all packages: all -# -# If either minor_only or fix_only is set, only packages with semantic versioning schemes -# will be tracked. -# -# If a package is both minor_only and fix_only, the minor releases will be tracked -# -# If a - is placed in front of package name, it'll be excluded from the update rule -# -# optional env variables -# ALL_PACKAGES: when true, ignore is package is owned by me -# skip_package: array of packages to skip, place a - in front of package name to not exclude it -# add_package: array of additional packages to check -# - -repo=${downstream/*\/} -release=${downstream/\/$repo/} -release=${release/*\/} -release=${release/v} -arch=$(apk --print-arch) -# add special case for postmarketos -[ "$release" == "postmarketos" ] && { release=$repo; repo="pmos"; arch="aarch64"; } -[ "$release" == "master" ] && release=edge - -is_semantic() { - local downstream_version_dot=${1//[^.]} - if [[ ${#downstream_version_dot} -eq 2 ]]; then - return 0 - fi - return 1 -} - - -echo "Checking $downstream for out of date packages" -curl --silent $downstream/$arch/APKINDEX.tar.gz | tar -O -zx APKINDEX > APKINDEX - -if [ "$ALL_PACKAGES" == "true" ]; then - owned_by_you=$(awk -F ':' '{if($1=="o"){print $2}}' APKINDEX | sort | uniq) - echo "Found $(printf '%s\n' $owned_by_you | wc -l ) packages" -else - owned_by_you=$(awk -v RS= -v ORS="\n\n" '/m:Antoine Martin \(ayakael\) /' APKINDEX | awk -F ':' '{if($1=="o"){print $2}}' | sort | uniq) - echo "Found $(printf '%s\n' $owned_by_you | wc -l ) packages owned by you" -fi - -# add additionnal packages -owned_by_you="$owned_by_you $add_package" - -rm -f out_of_date not_in_anitya - -for pkg in $owned_by_you; do - downstream_version=$(sed -n "/^P:$pkg$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="V"){print $2}}' | sort -V | tail -n 1) - downstream_version=${downstream_version/-*} - - # skip package if in $skip_package array - if [[ "$skip_package" == *all* || "$skip_package" == *$pkg* ]] && [[ "$skip_package" != *-$pkg* ]]; then - echo "$pkg skipped" - continue - fi - - # special cases where package is not semantic - case $pkg in - # track u-boot-pine64-pinenote against mainline u-boot, and track upstream rockchip blobs - u-boot-pine64-pinenote) - upstream_version="$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/u-boot" | jq -r '.stable_versions.[]' | head -n1)" - - # some reason the commit now not in APKINDEX, using master instead - #commit=$(sed -n "/^P:$pkg$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="c"){print $2}}') - #commit=${commit/-dirty/} - commit=master - - # fetches upstream version for blobs using ini file - upstream_trust="$(curl --fail -s 'https://raw.githubusercontent.com/rockchip-linux/rkbin/master/RKTRUST/RK3566TRUST_ULTRA.ini' | grep bl31 | awk -F '=' '{if($1"="PATH){print $2}}' | grep -o -P '(?<=_v).*(?=.elf)')" - upstream_ddr="$(curl --fail -s 'https://raw.githubusercontent.com/rockchip-linux/rkbin/master/RKBOOT/RK3566MINIALL_ULTRA.ini' | grep ddr | awk -F '=' '{if($1"="PATH){print $2}}' | head -n 1 | grep -o -P '(?<=_v).*(?=.bin)')" - - # extracts downstream version via _trust_ver and _ddr_ver variable - downstream_trust=$(curl --fail -X GET -s "https://gitlab.postmarketos.org/postmarketOS/pmaports/-/raw/$commit/device/testing/u-boot-pine64-pinenote/APKBUILD" | awk -F '=' '{if($1=="_trust_ver"){print $2}}') - downstream_ddr=$(curl --fail -X GET -s "https://gitlab.postmarketos.org/postmarketOS/pmaports/-/raw/$commit/device/testing/u-boot-pine64-pinenote/APKBUILD" | awk -F '=' '{if($1=="_ddr_ver"){print $2}}') - - # compares versions and creates newline in out_of_date if problematic - if [ "$upstream_trust" != "$downstream_trust" ]; then - echo "$pkg new Trust blob $upstream_trust version available" - echo "$pkg(trust) $downstream_trust $upstream_trust $repo $release" >> out_of_date - fi - if [ "$upstream_ddr" != "$downstream_ddr" ]; then - echo "$pkg new ddr blob $upstream_ddr version available" - echo "$pkg(ddr) $downstream_ddr $upstream_ddr $repo $release" >> out_of_date - fi - - ;; - # release-monitoring omits the extra B, while we keep it but put it after the version no. - looking-glass) upstream_version="$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | head -n1)b";; - # we want to track both Firefox security upgrades + Zotero upgrades - zotero) - commit=$(sed -n "/^P:$pkg$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="c"){print $2}}') - downstream_fx_ver=$(curl --fail -X GET -s "https://gitlab.alpinelinux.org/alpine/aports/-/raw/$commit/community/zotero/APKBUILD" | awk -F '=' '{if($1=="_fxver"){print $2}}') - upstream_fx_ver=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/firefox-esr" | jq -r ".stable_versions.[] | match(\"${downstream_fx_ver/.*.*}.*\").string" | head -n1) - if [ "$upstream_fx_ver" != "$downstream_fx_ver" ]; then - echo "$pkg new Firefox $upstream_fx_ver version available" - echo "$pkg(fx_ver) $downstream_fx_ver $upstream_fx_ver $repo $release" >> out_of_date - fi - upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | head -n1) - ;; - # aports omits the -beta part of the version - freetube) upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/packages/?name=$pkg&distribution=Alpine" | jq -r '.items.[].version' | sed "s|-beta||");; - # we only track x.x.1xx feature branches of SDK and stage0 - dotnet*sdk|dotnet*stage0) upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version::-2}.*\").string" | sed 's|-.*||' | head -n1);; - # we want to track both current major version and upstream latest - electron) - upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/projects/?name=$pkg&distribution=Alpine" | jq -r '.items.[].stable_versions' | jq -r ".[] | match(\"${downstream_version/.*}.*\").string" | head -n 1) - latest_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/packages/?name=$pkg&distribution=Alpine" | jq -r '.items.[].stable_version' ) - # append version number to signal that this is not latest major version - if [ "${upstream_version/.*}" != "${latest_version/.*}" ]; then - echo "$pkg(${latest_version/.*}) major version available" - echo "$pkg(${latest_version/.*}) $downstream_version $latest_version $repo $release" >> out_of_date - pkg="$pkg(${upstream_version/.*})" - fi - ;; - # we want to track LTS (even releases) rather than latest - arm-trusted-firmware) - if [[ "$fix_only" == *all* || "$fix_only" == *$pkg* ]] || [[ "$minor_only" == *all* || "$minor_only" == *$pkg* ]]; then - upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version%.*}.*\").string" | head -n1) - else - upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[] | select(test("^[0-9]+\\.[0-9]+\\.[0-9]+$")) | select(split(".") | .[1] | tonumber | . % 2 == 0)' | head -n1) - fi - ;; - # track linux-pine64-pinenote against latest - linux-pine64-pinenote) - upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/315000" | jq -r ".stable_versions.[] | match(\"${downstream_version%.*}.*\").string" | head -n1) - latest_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/315000" | jq -r ".stable_versions.[]" | head -n1) - - # append version number to signal that this is not latest major version - if [ "${upstream_version/.*.*}" != "${latest_version/.*.*}" ]; then - echo "$pkg(${latest_version/.*.*}) major version available" - echo "$pkg(${latest_version/.*.*}) $downstream_version $latest_version $repo $release" >> out_of_date - pkg="$pkg(${upstream_version%.*})" - fi - ;; - # track linux-radxa against BSP kernel (usually got awful late - linux-radxa) - upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | head -n1) - upstream_version=${upstream_version/-*} - ;; - dotnet*-sdk|dotnet*-stage0) - upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/141853" | jq -r ".stable_versions.[] | match(\"${downstream_version::-2}.*\").string" | head -n 1) - ;; - dotnet*-runtime) - upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/220385" | jq -r ".stable_versions.[] | match(\"${downstream_version%.*}.*\").string" | head -n 1) - ;; - # removes last bit in github tag from usbboot release, as not needed - raspberrypi-usbboot) curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | head -n1 | sed 's|-.*||';; - *) - - if [[ "$minor_only" == *all* || "$minor_only" == *$pkg* ]] && [[ "$minor_only" != *-$pkg* ]]; then - # continues when package version scheme is not semantic, but minor_only or fix_only is set - if ! is_semantic $downstream_version; then - echo "$pkg is not semantic, and minor_only is set" - continue - fi - upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version%.*.*}.*\").string" | head -n1) - elif [[ "$fix_only" == *all* || "$fix_only" == *$pkg* ]] && [[ "$fix_only" != *-$pkg* ]]; then - # continues when package version scheme is not semantic, but minor_only or fix_only is set - if ! is_semantic $downstream_version; then - echo "$pkg is not semantic, and fix_only is set" - continue - fi - upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version%.*}.*\").string" | head -n1) - else - upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | head -n1) - fi - ;; - esac - - if [ -z "$upstream_version" ]; then - echo "$pkg not in anitya" - # do not track not_in_anitya if either minor_only or fix_only is set - if [ -z ${minor_only+x} ] && [ -z ${fix_only+x} ]; then - echo "$pkg" >> not_in_anitya - fi - elif [ "$downstream_version" != "$(printf '%s\n' $upstream_version $downstream_version | sort -V | head -n 1)" ]; then - echo "$pkg higher downstream $upstream_version" - continue - elif [ "$upstream_version" != "$downstream_version" ]; then - echo "$pkg upstream version $upstream_version does not match downstream version $downstream_version in $release" - echo "$pkg $downstream_version $upstream_version $repo $release" >> out_of_date - fi -done diff --git a/.forgejo/bin/clear-repo.sh b/.forgejo/bin/clear-repo.sh deleted file mode 100755 index 486321b..0000000 --- a/.forgejo/bin/clear-repo.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/sh - -TARGET_REPO=$1 -ARCH="x86 x86_64 armhf armv7 aarch64 ppc64le s390x mips64 riscv64 loongarch64" - -for arch in $ARCH; do - # check if repo exists - wget --spider $TARGET_REPO/$arch/APKINDEX.tar.gz -o /dev/null || continue - echo ">>> Clearing repo $TARGET_REPO/$arch" - - curl --silent $TARGET_REPO/$arch/APKINDEX.tar.gz | tar -O -zx APKINDEX > APKINDEX - - pkgs=$(awk -F ':' '{if($1=="o"){print $2}}' APKINDEX | sort | uniq) - - for pkg in $pkgs; do - pkgvers=$(sed -n "/^P:$pkg$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="V"){print $2}}') - for pkgver in $pkgvers; do - echo "Deleting $pkg-$pkgver of arch $arch from $TARGET_REPO" - curl -s --user $FORGE_REPO_USER:$FORGE_REPO_TOKEN -X DELETE $TARGET_REPO/$arch/$pkg-$pkgver.apk - done - done -done diff --git a/.forgejo/bin/create_issue.sh b/.forgejo/bin/create_issue.sh deleted file mode 100755 index 3164b14..0000000 --- a/.forgejo/bin/create_issue.sh +++ /dev/null @@ -1,190 +0,0 @@ -#!/bin/bash - -# expects: -# env variable ISSUE_TOKEN -# file out_of_date - -IFS=' -' -repo=${downstream/*\/} - -does_it_exist() { - name=$1 - downstream_version=$2 - upstream_version=$3 - repo=$4 - release=$5 - - query="$repo/$name: upgrade to $upstream_version" - if [ "$release" != "edge" ]; then - query="%22[$release] $query%22" - elif [ "$repo" != "pmos" ] && [ "$repo" != "user" ]; then - # workaround to this query matching both stable and edge branch - query="%22$query%22&labels=Edge" - else - query="%22$query%22" - fi - query="$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' | sed 's|\[|%5B|g' | sed 's|\]|%5D|g')" - - result="$(curl -L --silent -X 'GET' \ - "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues&sort=latest" \ - -H 'accept: application/json' \ - -H "Authorization: token $ISSUE_TOKEN" - )" - - if [ "$result" == "[]" ]; then - return 1 - fi -} - -is_it_old() { - name=$1 - downstream_version=$2 - upstream_version=$3 - repo=$4 - release=$5 - - query="$repo/$name: upgrade to" - if [ "$release" != "edge" ]; then - query="%22[$release] $query%22" - elif [ "$repo" != "pmos" ] && [ "$repo" != "user" ]; then - # workaround to this query matching both stable and edge branch - query="%22$query%22&labels=Edge" - else - query="%22$query%22" - fi - query="$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' | sed 's|\[|%5B|g' | sed 's|\]|%5D|g')" - - result="$(curl -L --silent -X 'GET' \ - "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues&sort=latest" \ - -H 'accept: application/json' \ - -H "authorization: token $ISSUE_TOKEN" - )" - - result_title="$(echo $result | jq -r '.[].title' )" - result_id="$(echo $result | jq -r '.[].number' )" - result_upstream_version="$(echo $result_title | awk '{print $4}')" - - if [ "$upstream_version" != "$result_upstream_version" ]; then - echo $result_id - else - echo 0 - fi -} - -update_title() { - name=$1 - downstream_version=$2 - upstream_version=$3 - repo=$4 - release=$5 - id=$6 - - title="$repo/$name: upgrade to $upstream_version" - if [ "$release" != "edge" ]; then title="[$release] $title"; fi - - result=$(curl -L --silent -X 'PATCH' \ - "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues/$id" \ - -H 'accept: application/json' \ - -H "authorization: token $ISSUE_TOKEN" \ - -H 'Content-Type: application/json' \ - -d "{\"title\": \"$title\"}" - ) - - return 0 -} - -create_issue() { - name=$1 - downstream_version=$2 - upstream_version=$3 - repo=$4 - release=$5 - - title="$repo/$name: upgrade to $upstream_version" - if [ "$release" != "edge" ]; then title="[$release] $title"; fi - - result=$(curl -L --silent -X 'POST' \ - "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues" \ - -H 'accept: application/json' \ - -H "authorization: token $ISSUE_TOKEN" \ - -H 'Content-Type: application/json' \ - -d "{ - \"title\": \"$title\", - \"labels\": [ - $LABEL_NUMBER - ] - }") - - return 0 -} - -if [ -f out_of_date ]; then - out_of_date="$(cat out_of_date)" - - echo "Detected $(wc -l out_of_date) out-of-date packages, creating issues" - - for pkg in $out_of_date; do - name="$(echo $pkg | awk '{print $1}')" - downstream_version="$(echo $pkg | awk '{print $2}')" - upstream_version="$(echo $pkg | awk '{print $3}')" - repo="$(echo $pkg | awk '{print $4}')" - release="$(echo $pkg | awk '{print $5}')" - - if does_it_exist $name $downstream_version $upstream_version $repo $release; then - echo "Issue for $repo/$name already exists" - continue - fi - - id=$(is_it_old $name $downstream_version $upstream_version $repo $release) - - if [ "$id" != "0" ] && [ -n "$id" ]; then - echo "Issue for $repo/$name needs updating" - update_title $name $downstream_version $upstream_version $repo $release $id - continue - fi - - echo "Creating issue for $repo/$name" - create_issue $name $downstream_version $upstream_version $repo $release - done -fi - -if [ -f not_in_anitya ]; then - query="Add missing $repo packages to anitya" - query="%22$(echo $query | sed 's| |%20|g')%22" - - result="$(curl -L --silent -X 'GET' \ - "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues&sort=latest" \ - -H 'accept: application/json' \ - -H "authorization: token $ISSUE_TOKEN" - )" - - if [ "$result" == "[]" ]; then - echo "Creating anitya issue" - result=$(curl -L --silent -X 'POST' \ - "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues" \ - -H 'accept: application/json' \ - -H "authorization: token $ISSUE_TOKEN" \ - -H 'Content-Type: application/json' \ - -d "{ - \"title\": \"Add missing $repo packages to anitya\", - \"body\": \"- [ ] $(sed '{:q;N;s/\n/\\n- [ ] /g;t q}' not_in_anitya)\", - \"labels\": [ - $LABEL_NUMBER - ] - }") - - else - echo "Updating anitya issue" - result_id="$(echo $result | jq -r '.[].number' )" - result=$(curl -L --silent -X 'PATCH' \ - "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues/$result_id" \ - -H 'accept: application/json' \ - -H "authorization: token $ISSUE_TOKEN" \ - -H 'Content-Type: application/json' \ - -d "{ - \"body\": \"- [ ] $(sed '{:q;N;s/\n/\\n- [ ] /g;t q}' not_in_anitya)\" - }" - ) - fi -fi diff --git a/.forgejo/bin/deploy.sh b/.forgejo/bin/deploy.sh index 57afd32..3a4fb0a 100755 --- a/.forgejo/bin/deploy.sh +++ b/.forgejo/bin/deploy.sh @@ -4,7 +4,7 @@ set -eu -o pipefail readonly REPOS="backports user" -readonly BASEBRANCH=$CI_MERGE_REQUEST_TARGET_BRANCH_NAME +readonly BASEBRANCH=$GITHUB_BASE_REF readonly TARGET_REPO=$CI_ALPINE_REPO apkgs=$(find package -type f -name "*.apk") @@ -14,6 +14,14 @@ for apk in $apkgs; do arch=$(echo $apk | awk -F '/' '{print $3}') name=$(echo $apk | awk -F '/' '{print $4}') + if [ "$(curl -s $GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/pulls/$GITHUB_EVENT_NUMBER | jq .draft)" == "true" ]; then + # if draft, send to -testing branch + branch="$branch-testing" + else + # if not draft, assume that this was sent to $branch-testing and nuke it + curl -s --user $FORGE_REPO_USER:$FORGE_REPO_TOKEN -X DELETE $TARGET_REPO/$BASEBRANCH/$branch-testing/$arch/$name + fi + echo "Sending $name of arch $arch to $TARGET_REPO/$BASEBRANCH/$branch" return=$(curl -s --user $FORGE_REPO_USER:$FORGE_REPO_TOKEN --upload-file $apk $TARGET_REPO/$BASEBRANCH/$branch 2>&1) echo $return diff --git a/.forgejo/bin/generate-cross.sh b/.forgejo/bin/generate-cross.sh deleted file mode 100755 index 878b25f..0000000 --- a/.forgejo/bin/generate-cross.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash - -TARGET_RELEASE=$1 -shift -TARGET_ARCH=$@ -CURRENT_ARCH=$(cat /etc/apk/arch) - -if [ -z "$TARGET_RELEASE" ]; then - echo ">>> No target release specified, assumming edge" - TARGET_RELEASE=edge -fi -[[ "$TARGET_RELEASE" == "edge" ]] && TARGET_BRANCH=master || TARGET_BRANCH="${TARGET_RELEASE/v}-stable" - -if [[ ! -d "aports-$TARGET_RELEASE" ]]; then - echo ">>> Fetching aports for $TARGET_RELEASE" - git init aports-$TARGET_RELEASE - git -C aports-$TARGET_RELEASE remote add origin https://gitlab.alpinelinux.org/alpine/aports - git -C aports-$TARGET_RELEASE fetch --depth 1 origin $TARGET_BRANCH - git -C aports-$TARGET_RELEASE checkout $TARGET_BRANCH - [[ $? -ne 0 ]] && { echo ">>> Git fetch failed, does your release exist?"; exit; } || true -fi - -if [ -z "$TARGET_ARCH" ]; then - echo ">>> No arch specified, assuming target to all arches supported by upstream for release $TARGET_RELEASE" - TARGET_ARCH=$(cat aports-$TARGET_RELEASE/scripts/mkimg.minirootfs.sh | tr -d "\t" | awk -F "=" '{if($1=="arch"){print $2}}' | tr -d \" | sed "s| $CURRENT_ARCH||") - if [ -z "$TARGET_ARCH" ]; then - echo ">>> Could not compute arches that are supported, does your release exist?" - exit - fi -fi - -. /usr/share/abuild/functions.sh - -for arch in $TARGET_ARCH; do - if [[ "$(arch_to_hostspec $arch)" == "unknown" ]]; then - echo ">>> $arch not valid arch, please chose among the following" - sed -n '/^arch_to_hostspec/,/esac$/ {s/esac//;p;}' /usr/share/abuild/functions.sh | sed -e '/unknown/d' -e '/arch/d' -e '/case/d' -e "/$CURRENT_ARCH/d" | awk '{print $1}' | tr -d ')' - exit - fi -done - -echo ">>> Targetting $TARGET_ARCH for cross generation" - -( - cd aports-$TARGET_RELEASE/scripts - # this stops bootstrap from building the whole base system - sed -i 's|^msg "Cross building base system"|exit; msg "Cross building base system"|' bootstrap.sh - for arch in $TARGET_ARCH; do - echo ">>> Building cross-compilers for $arch" - ./bootstrap.sh $arch - [[ $? -ne 0 ]] && { echo ">>> Cross-build failure"; exit; } || true - done - echo ">>> Building done" -) diff --git a/.forgejo/workflows/build-aarch64.yaml b/.forgejo/workflows/build-aarch64.yaml index 78db319..885560f 100644 --- a/.forgejo/workflows/build-aarch64.yaml +++ b/.forgejo/workflows/build-aarch64.yaml @@ -2,6 +2,10 @@ on: pull_request: types: [ assigned, opened, synchronize, reopened ] +concurrency: + group: ${{ github.head_ref || github.ref_name }} + cancel-in-progress: true + jobs: build-aarch64: runs-on: aarch64 @@ -15,7 +19,6 @@ jobs: steps: - name: Environment setup run: | - doas apk upgrade -a doas apk add nodejs git patch curl cd /etc/apk/keys doas curl -JO https://ayakael.net/api/packages/forge/alpine/key @@ -24,11 +27,9 @@ jobs: with: fetch-depth: 500 - name: Package build - run: | - ${{ github.workspace }}/.forgejo/bin/build.sh - touch packages/dummy + run: ${{ github.workspace }}/.forgejo/bin/build.sh - name: Package upload - uses: actions/upload-artifact@v3 + uses: forgejo/upload-artifact@v3 with: name: package path: packages @@ -40,15 +41,15 @@ jobs: image: alpine:latest env: CI_ALPINE_REPO: 'https://ayakael.net/api/packages/forge/alpine' - CI_MERGE_REQUEST_TARGET_BRANCH_NAME: ${{ github.base_ref }} FORGE_REPO_TOKEN: ${{ secrets.FORGE_REPO_TOKEN }} FORGE_REPO_USER: ${{ vars.FORGE_REPO_USER }} + GITHUB_EVENT_NUMBER: ${{ github.event.number }} steps: - name: Setting up environment - run: apk add nodejs curl findutils git gawk + run: apk add nodejs curl findutils git gawk jq - name: Repo pull uses: actions/checkout@v4 - name: Package download - uses: actions/download-artifact@v3 + uses: forgejo/download-artifact@v3 - name: Package deployment run: ${{ github.workspace }}/.forgejo/bin/deploy.sh diff --git a/.forgejo/workflows/build-armv7.yaml b/.forgejo/workflows/build-armv7.yaml deleted file mode 100644 index aaf4029..0000000 --- a/.forgejo/workflows/build-armv7.yaml +++ /dev/null @@ -1,54 +0,0 @@ -on: - pull_request: - types: [ assigned, opened, synchronize, reopened ] - -jobs: - build-armv7: - runs-on: armv7 - container: - image: alpinelinux/alpine-gitlab-ci:latest - env: - CI_PROJECT_DIR: ${{ github.workspace }} - CI_DEBUG_BUILD: ${{ runner.debug }} - CI_MERGE_REQUEST_PROJECT_URL: ${{ github.server_url }}/${{ github.repository }} - CI_MERGE_REQUEST_TARGET_BRANCH_NAME: ${{ github.base_ref }} - steps: - - name: Environment setup - run: | - doas apk upgrade -a - doas apk add nodejs git patch curl - cd /etc/apk/keys - doas curl -JO https://ayakael.net/api/packages/forge/alpine/key - - name: Repo pull - uses: actions/checkout@v4 - with: - fetch-depth: 500 - - name: Package build - run: | - ${{ github.workspace }}/.forgejo/bin/build.sh - touch packages/dummy - - name: Package upload - uses: actions/upload-artifact@v3 - with: - name: package - path: packages - - deploy-armv7: - needs: [build-armv7] - runs-on: armv7 - container: - image: alpine:latest - env: - CI_ALPINE_REPO: 'https://ayakael.net/api/packages/forge/alpine' - CI_MERGE_REQUEST_TARGET_BRANCH_NAME: ${{ github.base_ref }} - FORGE_REPO_TOKEN: ${{ secrets.FORGE_REPO_TOKEN }} - FORGE_REPO_USER: ${{ vars.FORGE_REPO_USER }} - steps: - - name: Setting up environment - run: apk add nodejs curl findutils git gawk - - name: Repo pull - uses: actions/checkout@v4 - - name: Package download - uses: actions/download-artifact@v3 - - name: Package deployment - run: ${{ github.workspace }}/.forgejo/bin/deploy.sh diff --git a/.forgejo/workflows/build-cross.yaml b/.forgejo/workflows/build-cross.yaml deleted file mode 100644 index f4737b6..0000000 --- a/.forgejo/workflows/build-cross.yaml +++ /dev/null @@ -1,59 +0,0 @@ -on: - workflow_dispatch: - inputs: - target_arch: - description: 'target arch' - required: false - type: string - -jobs: - build-cross: - runs-on: x86_64 - container: - image: alpinelinux/alpine-gitlab-ci:latest - env: - CI_PROJECT_DIR: ${{ github.workspace }} - CI_DEBUG_BUILD: ${{ runner.debug }} - CI_MERGE_REQUEST_PROJECT_URL: ${{ github.server_url }}/${{ github.repository }} - CI_MERGE_REQUEST_TARGET_BRANCH_NAME: ${{ github.ref_name }} - steps: - - name: Environment setup - run: | - doas apk upgrade -a - doas apk add nodejs git patch curl bash - cd /etc/apk/keys - doas curl -JO https://ayakael.net/api/packages/forge/alpine/key - - name: Repo pull - uses: actions/checkout@v4 - with: - fetch-depth: 500 - - name: Package build - run: | - ${{ github.workspace }}/.forgejo/bin/build.sh - ${{ github.workspace }}/.forgejo/bin/generate-cross.sh ${{ github.ref_name }} ${{ inputs.target_arch }} - mv -v /home/buildozer/packages/main ${{ github.workspace }}/packages/cross - - name: Package upload - uses: actions/upload-artifact@v3 - with: - name: package - path: packages - - deploy-cross: - needs: [build-cross] - runs-on: x86_64 - container: - image: alpine:latest - env: - CI_ALPINE_REPO: 'https://ayakael.net/api/packages/forge/alpine' - CI_MERGE_REQUEST_TARGET_BRANCH_NAME: ${{ github.ref_name }} - FORGE_REPO_TOKEN: ${{ secrets.FORGE_REPO_TOKEN }} - FORGE_REPO_USER: ${{ vars.FORGE_REPO_USER }} - steps: - - name: Setting up environment - run: apk add nodejs curl findutils git gawk - - name: Repo pull - uses: actions/checkout@v4 - - name: Package download - uses: actions/download-artifact@v3 - - name: Package deployment - run: ${{ github.workspace }}/.forgejo/bin/deploy.sh diff --git a/.forgejo/workflows/build-x86_64.yaml b/.forgejo/workflows/build-x86_64.yaml index 84d6908..6451bf7 100644 --- a/.forgejo/workflows/build-x86_64.yaml +++ b/.forgejo/workflows/build-x86_64.yaml @@ -2,6 +2,10 @@ on: pull_request: types: [ assigned, opened, synchronize, reopened ] +concurrency: + group: ${{ github.head_ref || github.ref_name }} + cancel-in-progress: true + jobs: build-x86_64: runs-on: x86_64 @@ -15,7 +19,6 @@ jobs: steps: - name: Environment setup run: | - doas apk upgrade -a doas apk add nodejs git patch curl cd /etc/apk/keys doas curl -JO https://ayakael.net/api/packages/forge/alpine/key @@ -24,11 +27,9 @@ jobs: with: fetch-depth: 500 - name: Package build - run: | - ${{ github.workspace }}/.forgejo/bin/build.sh - touch packages/dummy + run: ${{ github.workspace }}/.forgejo/bin/build.sh - name: Package upload - uses: actions/upload-artifact@v3 + uses: forgejo/upload-artifact@v3 with: name: package path: packages @@ -40,15 +41,15 @@ jobs: image: alpine:latest env: CI_ALPINE_REPO: 'https://ayakael.net/api/packages/forge/alpine' - CI_MERGE_REQUEST_TARGET_BRANCH_NAME: ${{ github.base_ref }} FORGE_REPO_TOKEN: ${{ secrets.FORGE_REPO_TOKEN }} FORGE_REPO_USER: ${{ vars.FORGE_REPO_USER }} + GITHUB_EVENT_NUMBER: ${{ github.event.number }} steps: - name: Setting up environment - run: apk add nodejs curl findutils git gawk + run: apk add nodejs curl findutils git gawk jq - name: Repo pull uses: actions/checkout@v4 - name: Package download - uses: actions/download-artifact@v3 + uses: forgejo/download-artifact@v3 - name: Package deployment run: ${{ github.workspace }}/.forgejo/bin/deploy.sh diff --git a/.forgejo/workflows/check-backports.yml b/.forgejo/workflows/check-backports.yml deleted file mode 100644 index 99bb71d..0000000 --- a/.forgejo/workflows/check-backports.yml +++ /dev/null @@ -1,28 +0,0 @@ -on: - workflow_dispatch: - - schedule: - - cron: '0 5 * * *' - -jobs: - check-backports: - name: Check backports repo - runs-on: aarch64 - container: - image: alpine:latest - env: - downstream: https://ayakael.net/api/packages/forge/alpine/v3.23/backports - ISSUE_TOKEN: ${{ secrets.issue_token }} - LABEL_NUMBER: 1 - ALL_PACKAGES: true - steps: - - name: Environment setup - run: apk add grep coreutils gawk curl wget bash nodejs git jq sed - - name: Get scripts - uses: actions/checkout@v4 - with: - fetch-depth: 1 - - name: Check out-of-date packages - run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh - - name: Create issues - run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh diff --git a/.forgejo/workflows/check-community.yml b/.forgejo/workflows/check-community.yml deleted file mode 100644 index ee6d624..0000000 --- a/.forgejo/workflows/check-community.yml +++ /dev/null @@ -1,116 +0,0 @@ -on: - workflow_dispatch: - - schedule: - - cron: '0 5 * * *' - -jobs: - check-community-edge: - name: Check community(edge) repo - runs-on: aarch64 - container: - image: alpine:latest - env: - downstream: https://dl-cdn.alpinelinux.org/alpine/edge/community - ISSUE_TOKEN: ${{ secrets.issue_token }} - LABEL_NUMBER: 4 - steps: - - name: Environment setup - run: apk add grep coreutils gawk curl wget bash nodejs git jq sed - - name: Get scripts - uses: actions/checkout@v4 - with: - fetch-depth: 1 - - name: Check out-of-date packages - run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh - - name: Create issues - run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh - check-community-3.23: - name: Check community(3.23) repo - runs-on: aarch64 - container: - image: alpine:latest - env: - downstream: https://dl-cdn.alpinelinux.org/alpine/v3.23/community - ISSUE_TOKEN: ${{ secrets.issue_token }} - LABEL_NUMBER: 13 - fix_only: all -git-annex - skip_package: dotnet9-stage0 dotnet8-stage0 py3-boto3 py3-botocore dotnet10-stage0 - steps: - - name: Environment setup - run: apk add grep coreutils gawk curl wget bash nodejs git jq sed - - name: Get scripts - uses: actions/checkout@v4 - with: - fetch-depth: 1 - - name: Check out-of-date packages - run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh - - name: Create issues - run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh - check-community-3.22: - name: Check community(3.22) repo - runs-on: aarch64 - container: - image: alpine:latest - env: - downstream: https://dl-cdn.alpinelinux.org/alpine/v3.22/community - ISSUE_TOKEN: ${{ secrets.issue_token }} - LABEL_NUMBER: 13 - skip_package: 'all -dotnet8-runtime -dotnet9-runtime' - fix_only: all - steps: - - name: Environment setup - run: apk add grep coreutils gawk curl wget bash nodejs git jq sed - - name: Get scripts - uses: actions/checkout@v4 - with: - fetch-depth: 1 - - name: Check out-of-date packages - run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh - - name: Create issues - run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh - check-community-3.21: - name: Check community(3.21) repo - runs-on: aarch64 - container: - image: alpine:latest - env: - downstream: https://dl-cdn.alpinelinux.org/alpine/v3.21/community - ISSUE_TOKEN: ${{ secrets.issue_token }} - LABEL_NUMBER: 13 - skip_package: 'all -dotnet8-runtime -dotnet9-runtime' - fix_only: all - steps: - - name: Environment setup - run: apk add grep coreutils gawk curl wget bash nodejs git jq sed - - name: Get scripts - uses: actions/checkout@v4 - with: - fetch-depth: 1 - - name: Check out-of-date packages - run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh - - name: Create issues - run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh - check-community-3.20: - name: Check community(3.20) repo - runs-on: aarch64 - container: - image: alpine:latest - env: - downstream: https://dl-cdn.alpinelinux.org/alpine/v3.20/community - ISSUE_TOKEN: ${{ secrets.issue_token }} - LABEL_NUMBER: 13 - skip_package: 'all -dotnet8-runtime' - fix_only: all - steps: - - name: Environment setup - run: apk add grep coreutils gawk curl wget bash nodejs git jq sed - - name: Get scripts - uses: actions/checkout@v4 - with: - fetch-depth: 1 - - name: Check out-of-date packages - run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh - - name: Create issues - run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh - diff --git a/.forgejo/workflows/check-main.yml b/.forgejo/workflows/check-main.yml deleted file mode 100644 index 276feb5..0000000 --- a/.forgejo/workflows/check-main.yml +++ /dev/null @@ -1,112 +0,0 @@ -on: - workflow_dispatch: - - schedule: - - cron: '0 5 * * *' - -jobs: - check-main-edge: - name: Check main(edge) repo - runs-on: aarch64 - container: - image: alpine:latest - env: - downstream: https://dl-cdn.alpinelinux.org/alpine/edge/main - ISSUE_TOKEN: ${{ secrets.issue_token }} - LABEL_NUMBER: 4 - steps: - - name: Environment setup - run: apk add grep coreutils gawk curl wget bash nodejs git jq sed - - name: Get scripts - uses: actions/checkout@v4 - with: - fetch-depth: 1 - - name: Check out-of-date packages - run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh - - name: Create issues - run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh - check-main-3.23: - name: Check main(3.23) repo - runs-on: aarch64 - container: - image: alpine:latest - env: - downstream: https://dl-cdn.alpinelinux.org/alpine/v3.23/main - ISSUE_TOKEN: ${{ secrets.issue_token }} - LABEL_NUMBER: 13 - fix_only: all - steps: - - name: Environment setup - run: apk add grep coreutils gawk curl wget bash nodejs git jq sed - - name: Get scripts - uses: actions/checkout@v4 - with: - fetch-depth: 1 - - name: Check out-of-date packages - run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh - - name: Create issues - run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh - check-main-3.22: - name: Check main(3.22) repo - runs-on: aarch64 - container: - image: alpine:latest - env: - downstream: https://dl-cdn.alpinelinux.org/alpine/v3.22/main - ISSUE_TOKEN: ${{ secrets.issue_token }} - LABEL_NUMBER: 13 - fix_only: all - steps: - - name: Environment setup - run: apk add grep coreutils gawk curl wget bash nodejs git jq sed - - name: Get scripts - uses: actions/checkout@v4 - with: - fetch-depth: 1 - - name: Check out-of-date packages - run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh - - name: Create issues - run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh - check-main-3.21: - name: Check main(3.21) repo - runs-on: aarch64 - container: - image: alpine:latest - env: - downstream: https://dl-cdn.alpinelinux.org/alpine/v3.21/main - ISSUE_TOKEN: ${{ secrets.issue_token }} - LABEL_NUMBER: 13 - fix_only: all - steps: - - name: Environment setup - run: apk add grep coreutils gawk curl wget bash nodejs git jq sed - - name: Get scripts - uses: actions/checkout@v4 - with: - fetch-depth: 1 - - name: Check out-of-date packages - run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh - - name: Create issues - run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh - check-main-3.20: - name: Check main(3.20) repo - runs-on: aarch64 - container: - image: alpine:latest - env: - downstream: https://dl-cdn.alpinelinux.org/alpine/v3.20/main - ISSUE_TOKEN: ${{ secrets.issue_token }} - LABEL_NUMBER: 13 - fix_only: all - steps: - - name: Environment setup - run: apk add grep coreutils gawk curl wget bash nodejs git jq sed - - name: Get scripts - uses: actions/checkout@v4 - with: - fetch-depth: 1 - - name: Check out-of-date packages - run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh - - name: Create issues - run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh - diff --git a/.forgejo/workflows/check-pmos.yml b/.forgejo/workflows/check-pmos.yml deleted file mode 100644 index 750f608..0000000 --- a/.forgejo/workflows/check-pmos.yml +++ /dev/null @@ -1,50 +0,0 @@ -on: - workflow_dispatch: - - schedule: - - cron: '0 5 * * *' - -jobs: - check-pmos-edge: - name: Check pmos(edge) repo - runs-on: aarch64 - container: - image: alpine:latest - env: - downstream: http://mirror.postmarketos.org/postmarketos/master - ISSUE_TOKEN: ${{ secrets.issue_token }} - LABEL_NUMBER: 14 - skip_package: device-clockworkpi-uconsole-radxa-cm5 device-pine64-pinenote u-boot-radxa-cm5 - steps: - - name: Environment setup - run: apk add grep coreutils gawk curl wget bash nodejs git jq sed - - name: Get scripts - uses: actions/checkout@v4 - with: - fetch-depth: 1 - - name: Check out-of-date packages - run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh - - name: Create issues - run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh - check-pmos-latest: - name: Check pmos(v25.12) repo - runs-on: aarch64 - container: - image: alpine:latest - env: - downstream: http://mirror.postmarketos.org/postmarketos/v25.12 - ISSUE_TOKEN: ${{ secrets.issue_token }} - LABEL_NUMBER: 14 - fix_only: all - skip_package: device-clockworkpi-uconsole-radxa-cm5 device-pine64-pinenote u-boot-radxa-cm5 - steps: - - name: Environment setup - run: apk add grep coreutils gawk curl wget bash nodejs git jq sed - - name: Get scripts - uses: actions/checkout@v4 - with: - fetch-depth: 1 - - name: Check out-of-date packages - run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh - - name: Create issues - run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh diff --git a/.forgejo/workflows/check-testing.yml b/.forgejo/workflows/check-testing.yml deleted file mode 100644 index 71ad18e..0000000 --- a/.forgejo/workflows/check-testing.yml +++ /dev/null @@ -1,28 +0,0 @@ -on: - workflow_dispatch: - - schedule: - - cron: '0 5 * * *' - -jobs: - check-testing: - name: Check testing repo - runs-on: aarch64 - container: - image: alpine:latest - env: - downstream: https://dl-cdn.alpinelinux.org/alpine/edge/testing - ISSUE_TOKEN: ${{ secrets.issue_token }} - LABEL_NUMBER: 4 - skip_package: dotnet6-stage0 dotnet6-build - steps: - - name: Environment setup - run: apk add grep coreutils gawk curl wget bash nodejs git jq sed - - name: Get scripts - uses: actions/checkout@v4 - with: - fetch-depth: 1 - - name: Check out-of-date packages - run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh - - name: Create issues - run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh diff --git a/.forgejo/workflows/check-user.yml b/.forgejo/workflows/check-user.yml deleted file mode 100644 index db1f574..0000000 --- a/.forgejo/workflows/check-user.yml +++ /dev/null @@ -1,27 +0,0 @@ -on: - workflow_dispatch: - - schedule: - - cron: '0 5 * * *' - -jobs: - check-user: - name: Check user repo - runs-on: aarch64 - container: - image: alpine:latest - env: - downstream: https://ayakael.net/api/packages/forge/alpine/edge/user - ISSUE_TOKEN: ${{ secrets.issue_token }} - LABEL_NUMBER: 12 - steps: - - name: Environment setup - run: apk add grep coreutils gawk curl wget bash nodejs git jq sed - - name: Get scripts - uses: actions/checkout@v4 - with: - fetch-depth: 1 - - name: Check out-of-date packages - run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh - - name: Create issues - run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh diff --git a/.forgejo/workflows/clear-repo.yml b/.forgejo/workflows/clear-repo.yml deleted file mode 100644 index f60f5e7..0000000 --- a/.forgejo/workflows/clear-repo.yml +++ /dev/null @@ -1,25 +0,0 @@ -on: - workflow_dispatch: - inputs: - target_repo: - description: 'target repo' - default: 'edge/user' - required: true - type: string - -jobs: - clear-repo: - runs-on: x86_64 - container: - image: alpine:latest - env: - TARGET_REPO: 'https://ayakael.net/api/packages/forge/alpine/${{ inputs.target_repo }}' - FORGE_REPO_TOKEN: ${{ secrets.FORGE_REPO_TOKEN }} - FORGE_REPO_USER: ${{ vars.FORGE_REPO_USER }} - steps: - - name: Setting up environment - run: apk add nodejs curl findutils git gawk - - name: Repo pull - uses: actions/checkout@v4 - - name: Clear repo - run: ${{ github.workspace }}/.forgejo/bin/clear-repo.sh $TARGET_REPO diff --git a/.forgejo/workflows/lint.yaml b/.forgejo/workflows/lint.yaml index 743cefc..3614deb 100644 --- a/.forgejo/workflows/lint.yaml +++ b/.forgejo/workflows/lint.yaml @@ -14,9 +14,7 @@ jobs: CI_MERGE_REQUEST_PROJECT_URL: ${{ github.server_url }}/${{ github.repository }} CI_MERGE_REQUEST_TARGET_BRANCH_NAME: ${{ github.base_ref }} steps: - - run: | - doas apk upgrade -a - doas apk add nodejs git + - run: doas apk add nodejs git - uses: actions/checkout@v4 with: fetch-depth: 500 diff --git a/README.md b/README.md index 255b3ee..75165d0 100644 --- a/README.md +++ b/README.md @@ -5,24 +5,23 @@ Upstream: https://ayakael.net/forge/ayaports This repository contains aports that are not yet merged in the official Alpine Linux repository or don’t adhere to Alpine polices. Packages are automatically -built using CI. Once built, they are deployed to a Forgejo repository, making +built using CI. Once built, they are deployed to a git-lfs repository, making them available to apk. Branches are matched to Alpine releases. ## Repositories -You can browse all the repositories at https://ayakael.net/forge/ayaports +You can browse all the repositories at https://codeberg.org/ayakael/ayaports Affixed to each repository description is the appropriate link for use in `/etc/apk/repositories`. #### Backports ``` -https://ayakael.net/api/packages/forge/alpine/v3.21/backports +https://ayakael.net/api/packages/forge/alpine/edge/backports ``` -Aports from the official Alpine repositories backported from edge. This is only -available and kept up-to-date on latest stable release. +Aports from the official Alpine repositories backported from edge. #### User ``` diff --git a/backports/airsonic-advanced/APKBUILD b/backports/airsonic-advanced/APKBUILD new file mode 100644 index 0000000..ec5e7c1 --- /dev/null +++ b/backports/airsonic-advanced/APKBUILD @@ -0,0 +1,48 @@ +# Contributor: Kay Thomas +# Maintainer: Kay Thomas +pkgname=airsonic-advanced +_sha=1397446f979b1cdea283eec89ce4f0eae7d63450 +pkgver=11.0.0_git20230217 +pkgrel=0 +pkgdesc="Modern implementation of the Airsonic fork with several key performance and feature enhancements" +url="https://github.com/airsonic-advanced/airsonic-advanced" +# inconsistent test and build failures on other arches +arch="x86_64" +license="GPL-3.0-or-later" +depends="openjdk11" +makedepends="maven" +subpackages="$pkgname-openrc" +pkgusers="airsonic-advanced" +pkggroups="airsonic-advanced" +install="$pkgname.pre-install" +source="$pkgname-$pkgver.tar.gz::https://github.com/airsonic-advanced/airsonic-advanced/archive/$_sha.tar.gz + maven.patch + airsonic-advanced.initd + " +builddir="$srcdir/$pkgname-$_sha" + +build() { + mvn clean package -DskipTests +} + +check() { + mvn test +} + +package() { + install -dm755 -o airsonic-advanced -g airsonic-advanced \ + "$pkgdir"/var/airsonic + + install -m755 -o airsonic-advanced -g airsonic-advanced \ + "$builddir"/airsonic-main/target/airsonic.war \ + "$pkgdir"/var/airsonic/airsonic.war + + install -Dm755 "$srcdir"/$pkgname.initd \ + "$pkgdir"/etc/init.d/$pkgname +} + +sha512sums=" +f415620bdbed9fb3874afbf30d9362e68b1e9e8e90dbbed4ca3206b643cad97ca0558e64ec5b4440382f0ec908c3325e321ea3631c38ff9a2109163c8f0cfe0b airsonic-advanced-11.0.0_git20230217.tar.gz +6cb52fee19815fcdf2596e55d97d3e750321b1df7a4fec36fc9bc2a57d4be979a3905a42d3aa9dbeb2bf0d4f56edbf344f13551219b8e4d2ca583abd4bb5c8f9 maven.patch +ca87e6a7199950e6ac52aeb076a03f831d60ee9d4ceed47366bbd78443765d205796d895ebb244051d8033e5b2e9ccd648d20434039c854b8b50e766cc5cd10d airsonic-advanced.initd +" diff --git a/backports/airsonic-advanced/airsonic-advanced.initd b/backports/airsonic-advanced/airsonic-advanced.initd new file mode 100644 index 0000000..c1ce9bd --- /dev/null +++ b/backports/airsonic-advanced/airsonic-advanced.initd @@ -0,0 +1,14 @@ +#!/sbin/openrc-run + +supervisor=supervise-daemon +name="airsonic-advanced" +command="/usr/lib/jvm/java-11-openjdk/jre/bin/java" +command_args="-jar airsonic.war" +command_user="airsonic-advanced:airsonic-advanced" +directory="/var/airsonic" +pidfile="/run/airsonic-advanced.pid" + +depend() { + need net localmount + after firewall +} diff --git a/backports/airsonic-advanced/airsonic-advanced.pre-install b/backports/airsonic-advanced/airsonic-advanced.pre-install new file mode 100644 index 0000000..373b896 --- /dev/null +++ b/backports/airsonic-advanced/airsonic-advanced.pre-install @@ -0,0 +1,6 @@ +#!/bin/sh + +addgroup -S airsonic-advanced 2>/dev/null +adduser -S -D -H -s /sbin/nologin -G airsonic-advanced -g airsonic-advanced airsonic-advanced 2>/dev/null + +exit 0 diff --git a/backports/airsonic-advanced/maven.patch b/backports/airsonic-advanced/maven.patch new file mode 100644 index 0000000..56594b6 --- /dev/null +++ b/backports/airsonic-advanced/maven.patch @@ -0,0 +1,8 @@ +fixes maven 3.9 breaking change +https://maven.apache.org/docs/3.9.0/release-notes.html#potentially-breaking-core-changes +--- airsonic-advanced-1397446f979b1cdea283eec89ce4f0eae7d63450/.mvn/maven.config ++++ airsonic-advanced-1397446f979b1cdea283eec89ce4f0eae7d63450/.mvn/maven.config +@@ -1 +1,2 @@ +---settings ./.mvn/settings.xml ++--settings ++./.mvn/settings.xml diff --git a/backports/calibre/0002-calibre-use-make.patch b/backports/calibre/0002-calibre-use-make.patch deleted file mode 100644 index 1b49726..0000000 --- a/backports/calibre/0002-calibre-use-make.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/setup/build.py b/setup/build.py -index 956ad7504f..aa9d7ea028 100644 ---- a/setup/build.py -+++ b/setup/build.py -@@ -662,7 +662,7 @@ def build_headless(self): - f.seek(0), f.truncate() - f.write(raw) - bdir = os.path.join(bdir, 'build') -- cmd = [CMAKE] -+ cmd = [CMAKE, '-GUnix Makefiles'] - if is_macos_universal_build: - cmd += ['-DCMAKE_OSX_ARCHITECTURES=x86_64;arm64'] - if sw and os.path.exists(os.path.join(sw, 'qt')): diff --git a/backports/calibre/0003-calibre-disable-piper.patch b/backports/calibre/0003-calibre-disable-piper.patch deleted file mode 100644 index 855b62f..0000000 --- a/backports/calibre/0003-calibre-disable-piper.patch +++ /dev/null @@ -1,46 +0,0 @@ -piper uses a function in espeak-ng that is upstreamed but not in a -release. - -diff --git a/setup/extensions.json b/setup/extensions.json -index b39ce6d..c105031 100644 ---- a/setup/extensions.json -+++ b/setup/extensions.json -@@ -134,14 +134,6 @@ - "error": "!podofo_error", - "needs_c++": "17" - }, -- { -- "name": "piper", -- "sources": "calibre/utils/tts/piper.cpp", -- "needs_c++": "17", -- "libraries": "!piper_libs", -- "lib_dirs": "!piper_lib_dirs", -- "inc_dirs": "!piper_inc_dirs" -- }, - { - "name": "html_as_json", - "sources": "calibre/srv/html_as_json.cpp", -diff --git a/src/calibre/constants.py b/src/calibre/constants.py -index fa4b211459..7b27768953 100644 ---- a/src/calibre/constants.py -+++ b/src/calibre/constants.py -@@ -258,7 +258,6 @@ def __init__(self): - 'rcc_backend', - 'icu', - 'speedup', -- 'piper', - 'html_as_json', - 'fast_css_transform', - 'fast_html_entities', -diff --git a/src/calibre/utils/run_tests.py b/src/calibre/utils/run_tests.py -index ffd0f95c04..c80a35f83d 100644 ---- a/src/calibre/utils/run_tests.py -+++ b/src/calibre/utils/run_tests.py -@@ -192,6 +192,7 @@ def test_import_of_all_python_modules(self): - } - if 'SKIP_SPEECH_TESTS' in os.environ: - exclude_packages.add('calibre.gui2.tts') -+ exclude_modules.add('calibre.utils.tts.piper') - if not isbsd: - exclude_modules.add('calibre.devices.usbms.hal') - d = os.path.dirname diff --git a/backports/calibre/APKBUILD b/backports/calibre/APKBUILD index 47dc7d8..79582ee 100644 --- a/backports/calibre/APKBUILD +++ b/backports/calibre/APKBUILD @@ -1,6 +1,6 @@ # Maintainer: Cowington Post pkgname=calibre -pkgver=8.14.0 +pkgver=7.12.0 pkgrel=0 pkgdesc="Ebook management application" # qt6-webengine @@ -41,13 +41,11 @@ depends=" qt6-qtimageformats qt6-qtsvg qt6-qtwebengine - qt6-qtbase-private-dev udisks2 " makedepends=" cmake curl - ffmpeg-dev hunspell-dev hyphen-dev libmtp-dev @@ -56,7 +54,6 @@ makedepends=" podofo-dev py3-pyqt-builder py3-pyqt6-sip - py3-qt6 py3-sip python3-dev qt6-qtbase-dev @@ -71,15 +68,12 @@ subpackages=" " source="https://download.calibre-ebook.com/$pkgver/calibre-$pkgver.tar.xz 0001-$pkgname-no-update.patch - 0002-$pkgname-use-make.patch - 0003-$pkgname-disable-piper.patch " # net: downloads iso-codes # !check: no tests ran options="net !check" export LANG="en_US.UTF-8" -export PATH="$PATH:/usr/lib/qt6/bin" prepare() { default_prepare @@ -106,6 +100,7 @@ package() { python3 setup.py install \ --staging-root="$pkgdir"/usr \ + --no-compile \ --system-plugins-location=/usr/share/calibre/system-plugins cp -a man-pages/ "$pkgdir"/usr/share/man @@ -116,8 +111,6 @@ package() { } sha512sums=" -edb32e47b083e10fbf53088e485737f3b61bb642ce6c4dd444e58a6618979c3b05b77ceffc4b8cb42e35eee7dcc2b94145abc22030ffd8b5de63e45b321fbf72 calibre-8.14.0.tar.xz +ee654260d7047f0579a659b8907439a407fb561affcef84141126840452e7b98d10bb5e0a69e0cc809d9ba68729570900a0e7251f18b2056a94b0213880f1363 calibre-7.12.0.tar.xz eb8e7ce40ff8b8daf6e7e55a5dff8ec4dff06c45744266bb48b3194e92ab1196bc91468203e3c2ca1e5144166a7d6be90e6cf0253513e761b56a4c85be4c2c76 0001-calibre-no-update.patch -bbb7253257073ae14840b3b4697943fe129d862b49cabd9388ea24cbd0259e68a1d359870334772164897f0c781db121de55fcdf5bccc841e36c021abe56f1ec 0002-calibre-use-make.patch -0efcf35944cd0f42d6f3572839647fc5c8336562db3f71655211d3de682e155b6d6fee4d281f9576201156e0bc828b6a579a8708a27791e4e4d604d456416954 0003-calibre-disable-piper.patch " diff --git a/backports/caprine/caprine.sh b/backports/caprine/caprine.sh deleted file mode 100644 index bf0f8de..0000000 --- a/backports/caprine/caprine.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -/usr/bin/electron "/usr/lib/caprine" diff --git a/backports/coin/APKBUILD b/backports/coin/APKBUILD new file mode 100644 index 0000000..7881fd9 --- /dev/null +++ b/backports/coin/APKBUILD @@ -0,0 +1,36 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +pkgname=coin +pkgver=4.0.0 +pkgrel=6 +pkgdesc="OpenGL OpenInventor compatible graphics library" +url="https://github.com/coin3d/coin" +license="BSD-3-Clause" +arch="all" +makedepends="boost-dev cmake glu-dev graphviz samurai" +subpackages="$pkgname-dev" +source="https://github.com/coin3d/coin/releases/download/Coin-$pkgver/coin-$pkgver-src.tar.gz + TestSuitePatch.patch + " +builddir="$srcdir/coin" + +build() { + cmake -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCOIN_BUILD_TESTS=ON + cmake --build build +} + +check() { + cmake --build build --target test +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} + +sha512sums=" +e036276a243bfe252569cee1b67d38b8633fcf35bdf4e366a92ca67e23799d54d91fe272c23b383c451d330cee284809f28f237857493948149e0da1ebd64fae coin-4.0.0-src.tar.gz +aab464244b13371badf0878e5bfbcce859a42756cf8c7657d1480318aa291d296eac2741219c346bae056f761c5f46857f8fd1ec1c4129f86bc10236d3869deb TestSuitePatch.patch +" diff --git a/backports/coin/TestSuitePatch.patch b/backports/coin/TestSuitePatch.patch new file mode 100644 index 0000000..ce484e5 --- /dev/null +++ b/backports/coin/TestSuitePatch.patch @@ -0,0 +1,11 @@ +--- ./testsuite/TestSuiteUtils.cpp ++++ ./testsuite/TestSuiteUtils.cpp +@@ -39,7 +39,7 @@ + #elif defined(_WIN32) + #define USE_WIN32 + #else //_WIN32 +-#error Unknown system ++#define USE_POSIX + #endif //POSIX + + #include diff --git a/backports/cura/APKBUILD b/backports/cura/APKBUILD new file mode 100644 index 0000000..c6964f8 --- /dev/null +++ b/backports/cura/APKBUILD @@ -0,0 +1,75 @@ +# Contributor: Anjandev Momi +# Maintainer: Anjandev Momi +pkgname=cura +# uranium and curaengine packages must be updated in sync with this verion number +# py3-pynest2d and fdm-materials should be checked as well, but their versions are not always in sync +pkgver=5.2.2 +pkgrel=1 +pkgdesc="3D printer / slicing GUI built on top of the Uranium framework" +url="https://ultimaker.com/software/ultimaker-cura" +arch="noarch !ppc64le !x86 !armhf !riscv64 !s390x !armv7" # ppc64le: no py3-keyring +# x86: no curaengine +# armhf: no uranium, qt5-qtquickcontrols, qt5-qtquickcontrols2, qt5-qtgraphicaleffects +# riscv64: no uranium +# s390x: no py3-trimesh, no py3-numpy-stl +# armv7: no py3-trimesh +license="LGPL-3.0-or-later" +# add cura-binary-data to depends when packaged +depends=" + curaengine + fdm-materials + uranium + py3-arcus + py3-keyring + py3-numpy-stl + py3-pyclipper + py3-pynest2d + py3-pyserial + py3-qt6 + py3-requests + py3-trimesh + py3-zeroconf + " +makedepends="samurai cmake gettext gettext-dev" # needs msginit from gettext +checkdepends="py3-pytest" +subpackages="$pkgname-lang" +source="$pkgname-$pkgver.tar.gz::https://github.com/Ultimaker/Cura/archive/refs/tags/$pkgver.tar.gz + AppDesktopData.patch + CuraVersion.patch + cmake-helpers.patch + cmake.patch" +builddir="$srcdir/Cura-$pkgver" +options="!check" # tests broken after v5.x + +build() { + local pyver="$(python3 -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')" + cmake -B build -G Ninja \ + -DCURA_VERSION=$pkgver \ + -DPython_VERSION=$pyver \ + -DURANIUM_DIR=/usr/share/uranium \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DGETTEXT_MSGINIT_EXECUTABLE=msginit \ + -DCURA_BINARY_DATA_DIRECTORY=/usr/share/cura \ + -DCMAKE_BUILD_TYPE=minsizerel + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + mv $pkgdir/usr/bin/cura_app.py $pkgdir/usr/bin/cura + + # don't ever send any user or print info through the internet to Ultimaker + rm -rf "$pkgdir/usr/lib/cura/plugins/SliceInfoPlugin" + + install -d "$pkgdir"/usr/share/locale + mv "$pkgdir"/usr/share/cura/resources/i18n/* "$pkgdir"/usr/share/locale/ +} + +sha512sums=" +5d4e0fdc740d0c048905e2b87cc8c73eedea59b54766b74760505902007b365582d22b46b1cfdcd6914828840865c10a3beb0ef6a1f04ea181c81d44f42434bc cura-5.2.2.tar.gz +214e373f6cab7e3ccac12c96d1b5ca636d8d1e9ecdadaae84fc28fb429969c7c2d6055ce2a01b6db3ad85ab6cbc8d135cf2c26c77d7cfe13a73eb81aa5e85f11 AppDesktopData.patch +e3bb302db70ca195b2ce9831e71302c8ee2a51955fecc7264a495d7d4fc9c107cfd48811aa5865f16671e7b1ae126f95d3d7bbb6a70f367f7f91a2b32bce377b CuraVersion.patch +0db4ff97e7f82ae1a9dbc9c330d08c3e46249feeb3fb630f7c4e2de73749327337ec041680c39a07e0b5034c1b3f3656d75614ab4dc2f39861c8e27bdb2a58ef cmake-helpers.patch +05a73f892700ff6279230385b04180873a62b7413fa7f7d55ae150f1bcee57ef05eda0bd7fe444fe660ab66a044c958f42badd33b743fca81033ae8f19dd3805 cmake.patch +" diff --git a/backports/cura/AppDesktopData.patch b/backports/cura/AppDesktopData.patch new file mode 100644 index 0000000..9e2134f --- /dev/null +++ b/backports/cura/AppDesktopData.patch @@ -0,0 +1,58 @@ +--- /dev/null ++++ ./com.ultimaker.cura.appdata.xml +@@ -0,0 +1,33 @@ ++ ++ ++ ++ com.ultimaker.cura.desktop ++ CC0-1.0 ++ LGPL-3.0 and CC-BY-SA-4.0 ++ Cura ++ The world's most advanced 3d printer software ++ ++

++ Cura creates a seamless integration between hardware, software and ++ materials for the best 3D printing experience around. ++ Cura supports the 3MF, OBJ and STL file formats and is available on ++ Windows, Mac and Linux. ++

++
    ++
  • Novices can start printing right away
  • ++
  • Experts are able to customize 300 settings to achieve the best results
  • ++
  • Optimized profiles for Ultimaker materials
  • ++
  • Supported by a global network of Ultimaker certified service partners
  • ++
  • Print multiple objects at once with different settings for each object
  • ++
  • Cura supports STL, 3MF and OBJ file formats
  • ++
  • Open source and completely free
  • ++
++
++ ++ ++ https://raw.githubusercontent.com/Ultimaker/Cura/master/screenshot.png ++ ++ ++ https://ultimaker.com/software/ultimaker-cura?utm_source=cura&utm_medium=software&utm_campaign=cura-update-linux ++ Cura ++
+--- /dev/null ++++ ./com.ultimaker.cura.desktop.in +@@ -0,0 +1,19 @@ ++[Desktop Entry] ++Name=Ultimaker Cura ++Name[de]=Ultimaker Cura ++Name[nl]=Ultimaker Cura ++GenericName=3D Printing Software ++GenericName[de]=3D-Druck-Software ++GenericName[nl]=3D-printsoftware ++Comment=Cura converts 3D models into paths for a 3D printer. It prepares your print for maximum accuracy, minimum printing time and good reliability with many extra features that make your print come out great. ++Comment[de]=Cura wandelt 3D-Modelle in Pfade für einen 3D-Drucker um. Es bereitet Ihren Druck für maximale Genauigkeit, minimale Druckzeit und guter Zuverlässigkeit mit vielen zusätzlichen Funktionen vor, damit Ihr Druck großartig wird. ++Comment[nl]=Cura converteert 3D-modellen naar paden voor een 3D printer. Het bereidt je print voor om zeer precies, snel en betrouwbaar te kunnen printen, met veel extra functionaliteit om je print er goed uit te laten komen. ++Exec=@CMAKE_INSTALL_FULL_BINDIR@/cura %F ++TryExec=@CMAKE_INSTALL_FULL_BINDIR@/cura ++Icon=cura-icon ++Terminal=false ++Type=Application ++MimeType=model/stl;application/vnd.ms-3mfdocument;application/prs.wavefront-obj;image/bmp;image/gif;image/jpeg;image/png;text/x-gcode;application/x-amf;application/x-ply;application/x-ctm;model/vnd.collada+xml;model/gltf-binary;model/gltf+json;model/vnd.collada+xml+zip; ++Categories=Graphics; ++Keywords=3D;Printing;Slicer; ++StartupWMClass=cura.real diff --git a/backports/cura/CuraVersion.patch b/backports/cura/CuraVersion.patch new file mode 100644 index 0000000..916225d --- /dev/null +++ b/backports/cura/CuraVersion.patch @@ -0,0 +1,16 @@ +--- /dev/null ++++ ./cura/CuraVersion.py.in +@@ -0,0 +1,13 @@ ++# Copyright (c) 2020 Ultimaker B.V. ++# Cura is released under the terms of the LGPLv3 or higher. ++ ++CuraAppName = "@CURA_APP_NAME@" ++CuraAppDisplayName = "@CURA_APP_DISPLAY_NAME@" ++CuraVersion = "@CURA_VERSION@" ++CuraBuildType = "@CURA_BUILDTYPE@" ++CuraDebugMode = True if "@_cura_debugmode@" == "ON" else False ++CuraCloudAPIRoot = "@CURA_CLOUD_API_ROOT@" ++CuraCloudAPIVersion = "@CURA_CLOUD_API_VERSION@" ++CuraCloudAccountAPIRoot = "@CURA_CLOUD_ACCOUNT_API_ROOT@" ++CuraMarketplaceRoot = "@CURA_MARKETPLACE_ROOT@" ++CuraDigitalFactoryURL = "@CURA_DIGITAL_FACTORY_URL@" diff --git a/backports/cura/cmake-helpers.patch b/backports/cura/cmake-helpers.patch new file mode 100644 index 0000000..6204aaa --- /dev/null +++ b/backports/cura/cmake-helpers.patch @@ -0,0 +1,95 @@ +--- /dev/null ++++ ./cmake/CuraPluginInstall.cmake +@@ -0,0 +1,92 @@ ++# Copyright (c) 2022 Ultimaker B.V. ++# CuraPluginInstall.cmake is released under the terms of the LGPLv3 or higher. ++ ++# ++# This module detects all plugins that need to be installed and adds them using the CMake install() command. ++# It detects all plugin folder in the path "plugins/*" where there's a "plugin.json" in it. ++# ++# Plugins can be configured to NOT BE INSTALLED via the variable "CURA_NO_INSTALL_PLUGINS" as a list of string in the ++# form of "a;b;c" or "a,b,c". By default all plugins will be installed. ++# ++ ++option(PRINT_PLUGIN_LIST "Should the list of plugins that are installed be printed?" ON) ++ ++# Options or configuration variables ++set(CURA_NO_INSTALL_PLUGINS "" CACHE STRING "A list of plugins that should not be installed, separated with ';' or ','.") ++ ++file(GLOB_RECURSE _plugin_json_list ${CMAKE_SOURCE_DIR}/plugins/*/plugin.json) ++list(LENGTH _plugin_json_list _plugin_json_list_len) ++ ++# Sort the lists alphabetically so we can handle cases like this: ++# - plugins/my_plugin/plugin.json ++# - plugins/my_plugin/my_module/plugin.json ++# In this case, only "plugins/my_plugin" should be added via install(). ++set(_no_install_plugin_list ${CURA_NO_INSTALL_PLUGINS}) ++# Sanitize the string so the comparison will be case-insensitive. ++string(STRIP "${_no_install_plugin_list}" _no_install_plugin_list) ++string(TOLOWER "${_no_install_plugin_list}" _no_install_plugin_list) ++ ++# WORKAROUND counterpart of what's in cura-build. ++string(REPLACE "," ";" _no_install_plugin_list "${_no_install_plugin_list}") ++ ++list(LENGTH _no_install_plugin_list _no_install_plugin_list_len) ++ ++if(_no_install_plugin_list_len GREATER 0) ++ list(SORT _no_install_plugin_list) ++endif() ++if(_plugin_json_list_len GREATER 0) ++ list(SORT _plugin_json_list) ++endif() ++ ++# Check all plugin directories and add them via install() if needed. ++set(_install_plugin_list "") ++foreach(_plugin_json_path ${_plugin_json_list}) ++ get_filename_component(_plugin_dir ${_plugin_json_path} DIRECTORY) ++ file(RELATIVE_PATH _rel_plugin_dir ${CMAKE_CURRENT_SOURCE_DIR} ${_plugin_dir}) ++ get_filename_component(_plugin_dir_name ${_plugin_dir} NAME) ++ ++ # Make plugin name comparison case-insensitive ++ string(TOLOWER "${_plugin_dir_name}" _plugin_dir_name_lowercase) ++ ++ # Check if this plugin needs to be skipped for installation ++ set(_add_plugin ON) # Indicates if this plugin should be added to the build or not. ++ set(_is_no_install_plugin OFF) # If this plugin will not be added, this indicates if it's because the plugin is ++ # specified in the NO_INSTALL_PLUGINS list. ++ if(_no_install_plugin_list) ++ if("${_plugin_dir_name_lowercase}" IN_LIST _no_install_plugin_list) ++ set(_add_plugin OFF) ++ set(_is_no_install_plugin ON) ++ endif() ++ endif() ++ ++ # Make sure this is not a subdirectory in a plugin that's already in the install list ++ if(_add_plugin) ++ foreach(_known_install_plugin_dir ${_install_plugin_list}) ++ if(_plugin_dir MATCHES "${_known_install_plugin_dir}.+") ++ set(_add_plugin OFF) ++ break() ++ endif() ++ endforeach() ++ endif() ++ ++ if(_add_plugin) ++ if(${PRINT_PLUGIN_LIST}) ++ message(STATUS "[+] PLUGIN TO INSTALL: ${_rel_plugin_dir}") ++ endif() ++ get_filename_component(_rel_plugin_parent_dir ${_rel_plugin_dir} DIRECTORY) ++ install(DIRECTORY ${_rel_plugin_dir} ++ DESTINATION lib${LIB_SUFFIX}/cura/${_rel_plugin_parent_dir} ++ PATTERN "__pycache__" EXCLUDE ++ PATTERN "*.qmlc" EXCLUDE ++ ) ++ list(APPEND _install_plugin_list ${_plugin_dir}) ++ elseif(_is_no_install_plugin) ++ if(${PRINT_PLUGIN_LIST}) ++ message(STATUS "[-] PLUGIN TO REMOVE : ${_rel_plugin_dir}") ++ endif() ++ execute_process(COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/mod_bundled_packages_json.py ++ -d ${CMAKE_CURRENT_SOURCE_DIR}/resources/bundled_packages ++ ${_plugin_dir_name} ++ RESULT_VARIABLE _mod_json_result) ++ endif() ++endforeach() diff --git a/backports/cura/cmake.patch b/backports/cura/cmake.patch new file mode 100644 index 0000000..a74477f --- /dev/null +++ b/backports/cura/cmake.patch @@ -0,0 +1,85 @@ +--- ./CMakeLists.txt.orig ++++ ./CMakeLists.txt +@@ -1,10 +1,6 @@ + # Copyright (c) 2022 Ultimaker B.V. + # Cura is released under the terms of the LGPLv3 or higher. + +-# NOTE: This is only being used for translation scripts. +- +-# For MSVC flags, will be ignored on non-Windows OS's and this project in general. Only needed for cura-build-environment. +-cmake_policy(SET CMP0091 NEW) + project(cura) + cmake_minimum_required(VERSION 3.18) + +@@ -15,8 +11,44 @@ + set(URANIUM_DIR "${CMAKE_SOURCE_DIR}/../Uranium" CACHE PATH "The location of the Uranium repository") + set(URANIUM_SCRIPTS_DIR "${URANIUM_DIR}/scripts" CACHE PATH "The location of the scripts directory of the Uranium repository") + ++option(CURA_DEBUGMODE "Enable debug dialog and other debug features" OFF) ++if(CURA_DEBUGMODE) ++ set(_cura_debugmode "ON") ++endif() ++ + option(GENERATE_TRANSLATIONS "Should the translations be generated?" ON) + ++set(CURA_APP_NAME "cura" CACHE STRING "Short name of Cura, used for configuration folder") ++set(CURA_APP_DISPLAY_NAME "Ultimaker Cura" CACHE STRING "Display name of Cura") ++set(CURA_VERSION "master" CACHE STRING "Version name of Cura") ++set(CURA_BUILDTYPE "" CACHE STRING "Build type of Cura, eg. 'PPA'") ++set(CURA_CLOUD_API_ROOT "" CACHE STRING "Alternative Cura cloud API root") ++set(CURA_CLOUD_API_VERSION "" CACHE STRING "Alternative Cura cloud API version") ++set(CURA_CLOUD_ACCOUNT_API_ROOT "" CACHE STRING "Alternative Cura cloud account API version") ++set(CURA_MARKETPLACE_ROOT "" CACHE STRING "Alternative Marketplace location") ++set(CURA_DIGITAL_FACTORY_URL "" CACHE STRING "Alternative Digital Factory location") ++ ++configure_file(${CMAKE_SOURCE_DIR}/com.ultimaker.cura.desktop.in ${CMAKE_BINARY_DIR}/com.ultimaker.cura.desktop @ONLY) ++ ++configure_file(cura/CuraVersion.py.in CuraVersion.py @ONLY) ++ ++if(NOT DEFINED Python_VERSION) ++ set(Python_VERSION ++ 3.11 ++ CACHE STRING "Python Version" FORCE) ++ message(STATUS "Setting Python version to ${Python_VERSION}. Set Python_VERSION if you want to compile against an other version.") ++endif() ++if(APPLE) ++ set(Python_FIND_FRAMEWORK NEVER) ++endif() ++find_package(Python ${Python_VERSION} EXACT REQUIRED COMPONENTS Interpreter) ++message(STATUS "Linking and building ${project_name} against Python ${Python_VERSION}") ++if(NOT DEFINED Python_SITELIB_LOCAL) ++ set(Python_SITELIB_LOCAL ++ "${Python_SITELIB}" ++ CACHE PATH "Local alternative site-package location to install Cura" FORCE) ++endif() ++ + if(NOT ${URANIUM_DIR} STREQUAL "") + set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${URANIUM_DIR}/cmake") + endif() +@@ -29,4 +61,24 @@ + if(${GENERATE_TRANSLATIONS}) + CREATE_TRANSLATION_TARGETS() + endif() +-endif() +\ No newline at end of file ++endif() ++ ++install(DIRECTORY resources DESTINATION ${CMAKE_INSTALL_DATADIR}/cura) ++ ++include(CuraPluginInstall) ++ ++install(FILES cura_app.py DESTINATION ${CMAKE_INSTALL_BINDIR} ++ PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) ++install(DIRECTORY cura DESTINATION "${Python_SITELIB_LOCAL}") ++install(FILES ${CMAKE_BINARY_DIR}/CuraVersion.py DESTINATION "${Python_SITELIB_LOCAL}/cura/") ++if(NOT APPLE AND NOT WIN32) ++ install(FILES ${CMAKE_BINARY_DIR}/com.ultimaker.cura.desktop ++ DESTINATION ${CMAKE_INSTALL_DATADIR}/applications) ++ install(FILES ${CMAKE_SOURCE_DIR}/resources/images/cura-icon.png ++ DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/128x128/apps/) ++ install(FILES com.ultimaker.cura.appdata.xml ++ DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo) ++ install(FILES cura.sharedmimeinfo ++ DESTINATION ${CMAKE_INSTALL_DATADIR}/mime/packages/ ++ RENAME cura.xml ) ++endif() diff --git a/backports/dex/APKBUILD b/backports/dex/APKBUILD new file mode 100644 index 0000000..e777d8d --- /dev/null +++ b/backports/dex/APKBUILD @@ -0,0 +1,26 @@ +# Contributor: Anjandev Momi +# Maintainer: Anjandev Momi +pkgname=dex +pkgver=0.9.0 +pkgrel=1 +pkgdesc="program to generate and execute DesktopEntry files of the Application type" +url="https://github.com/jceb/dex" +arch="all" +license="GPL-3.0-or-later" +depends="python3" +makedepends="py3-sphinx" +subpackages="$pkgname-doc" +source="$pkgname-$pkgver.tar.gz::https://github.com/jceb/dex/archive/refs/tags/v$pkgver.tar.gz" +options="!check" # no testsuite + +build() { + make +} + +package() { + make install PREFIX=/usr MANPREFIX=/usr/share/man DESTDIR="$pkgdir" +} + +sha512sums=" +d68f5482cb0948f27a724437ddfc6de9a0f502bfd0d5c60c76fb85dda3c30e4c432013e530f6a91138c9ac9ff36b3824cd5e382e9d29bb9fb2ec2b9de4133094 dex-0.9.0.tar.gz +" diff --git a/backports/electron-tasje/APKBUILD b/backports/electron-tasje/APKBUILD index ac8776a..71648c7 100644 --- a/backports/electron-tasje/APKBUILD +++ b/backports/electron-tasje/APKBUILD @@ -1,7 +1,7 @@ # Contributor: lauren n. liberda # Maintainer: lauren n. liberda pkgname=electron-tasje -pkgver=0.7.3 +pkgver=0.7.1 pkgrel=0 pkgdesc="Tiny replacement for electron-builder" url="https://codeberg.org/selfisekai/electron_tasje/" @@ -31,5 +31,5 @@ package() { } sha512sums=" -251b7eabe74acdb5c7394f9d4d735b736acf555352785a9896ddaeed37632b238e823e1bb639e1f5a44a50455957ec41e1a585a3b2a9919b5818bb40843bd877 electron_tasje-0.7.3.tar.gz +665ccbd6cb357c25d55daed4ad3b3ce008da258054951d9d069a5b12e72dd5812d534f906868e6b18e78949f058069a961c394c6f21ab3b3fab5393c330445e5 electron_tasje-0.7.1.tar.gz " diff --git a/backports/electron/0001-hotfix-ignore-a-new-warning-in-rust-1.89.patch b/backports/electron/0001-hotfix-ignore-a-new-warning-in-rust-1.89.patch deleted file mode 100644 index 2c38c7c..0000000 --- a/backports/electron/0001-hotfix-ignore-a-new-warning-in-rust-1.89.patch +++ /dev/null @@ -1,21 +0,0 @@ -From adbc495726382c023b755c35aea36c6e9cad1950 Mon Sep 17 00:00:00 2001 -From: LN Liberda -Date: Sat, 23 Aug 2025 03:11:09 +0200 -Subject: [PATCH] hotfix: ignore a new warning in rust 1.89 - ---- - third_party/rust/chromium_crates_io/vendor/qr_code-v2/src/lib.rs | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/third_party/rust/chromium_crates_io/vendor/qr_code-v2/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/qr_code-v2/src/lib.rs -index 1b729621c2f47..55d392c6da72f 100644 ---- a/third_party/rust/chromium_crates_io/vendor/qr_code-v2/src/lib.rs -+++ b/third_party/rust/chromium_crates_io/vendor/qr_code-v2/src/lib.rs -@@ -5,7 +5,6 @@ - //! - - #![deny(missing_docs)] --#![deny(warnings)] - #![allow( - clippy::must_use_candidate, // This is just annoying. - clippy::use_self, // Rust 1.33 doesn't support Self::EnumVariant, let's try again in 1.37. diff --git a/backports/electron/APKBUILD b/backports/electron/APKBUILD index c57c98e..a35cba1 100644 --- a/backports/electron/APKBUILD +++ b/backports/electron/APKBUILD @@ -1,32 +1,30 @@ -# Contributor: lauren n. liberda -# Maintainer: Antoine Martin (ayakael) +# Maintainer: lauren n. liberda pkgname=electron -pkgver=39.2.7 -_gittag=v"${pkgver/_beta/-beta.}" +pkgver=30.0.9 +_semver="${pkgver/_beta/-beta.}" pkgrel=0 -_chromium=142.0.7444.235 -_copium_tag=142.0 +_chromium=124.0.6367.233 +_copium_tag=124.5 _depot_tools=495b23b39aaba2ca3b55dd27cadc523f1cb17ee6 pkgdesc="Electron cross-platform desktop toolkit" url="https://github.com/electron/electron" -# armv7: Segmentation fault on builder despite building in CI arch="aarch64 x86_64" # same as chromium license="MIT" depends="gtk+3.0 so:libudev.so.1 xdg-utils" -_llvmver=21 makedepends=" ada-dev alsa-lib-dev aom-dev + base64-dev bash brotli-dev bsd-compat-headers bzip2-dev c-ares-dev cairo-dev - clang$_llvmver-dev - clang$_llvmver-rtlib + clang-dev clang-extra-tools + compiler-rt crc32c-dev cups-dev curl-dev @@ -45,14 +43,13 @@ makedepends=" gn gzip harfbuzz-dev - highway-dev hdrhistogram-c-dev + highway-dev hunspell-dev http-parser-dev hwdata-dev java-jdk jpeg-dev - jsoncpp-dev krb5-dev lcms2-dev libarchive-tools @@ -60,6 +57,7 @@ makedepends=" libbsd-dev libcap-dev libdrm-dev + libevent-dev libexif-dev libgcrypt-dev libjpeg-turbo-dev @@ -76,9 +74,8 @@ makedepends=" libxscrnsaver-dev libxslt-dev linux-headers - lld$_llvmver - llhttp-dev - llvm$_llvmver + lld + llvm mesa-dev minizip-dev nghttp2-dev @@ -97,89 +94,81 @@ makedepends=" py3-setuptools py3-six python3 - re2-dev + qt5-qtbase-dev rsync rust - rust-bindgen samurai - simdutf-dev - snappy-dev speex-dev - spirv-tools-dev sqlite-dev - woff2-dev xcb-proto - yarn-berry + yarn zlib-dev zstd-dev " subpackages="$pkgname-lang $pkgname-dev" # the lower patches are specific to electron, the top ones are from the equivalent chromium version -source=" - https://ayakael.net/api/packages/mirrors/generic/electron/$_gittag/electron-$_gittag-$_chromium.tar.zst +source="https://ab-sn.lnl.gay/electron-$_semver-$_chromium.tar.zst copium-$_copium_tag.tar.gz::https://codeberg.org/selfisekai/copium/archive/$_copium_tag.tar.gz - 0001-hotfix-ignore-a-new-warning-in-rust-1.89.patch + chromium-revert-drop-of-system-java.patch compiler.patch disable-dns_config_service.patch disable-failing-tests.patch fc-cache-version.patch - fix-ffmpeg-codec-list.patch + fix-missing-cstdint-include-musl.patch + fix-opus.patch fstatat-32bit.patch gdbinit.patch generic-sensor-include.patch - headless-shell-no-license.patch + import-version.patch + libstdc++13.patch + mman.patch + musl-auxv.patch musl-sandbox.patch musl-tid-caching.patch - net-test-no-vpython.patch - net-test-pyws3-py3.12.patch + musl-v8-monotonic-pthread-cont_timedwait.patch no-execinfo.patch no-mallinfo.patch no-res-ninit-nclose.patch no-sandbox-settls.patch partalloc-no-tagging-arm64.patch + perfetto-libstdc++.patch pvalloc.patch + random-fixes.patch + quiche-array.patch + system-zstd.patch temp-failure-retry.patch + yes-musl.patch - electron_icon.patch - electron_python-jinja-3.10.patch - electron_webpack-hash.patch - electron_unbundle-node.patch - electron_system-zlib-headers.patch - electron_do-not-strip-binaries.patch - electron_shell-file-dialog-drop-glibc.patch - electron_use-system-yarn.patch + icon.patch + python-jinja-3.10.patch + webpack-hash.patch + unbundle-node.patch default.conf electron.desktop electron-launcher.sh " _copium_patches=" - cr131-v8-non4k-pages.patch - cr133-ffmpeg-no-noh264parse.patch - cr133-is-musl-libcxx.patch - cr138-node-version-check.patch - cr140-musl-prctl.patch - cr142-autofill-incomplete-formfielddata.patch + cr124-iwyu-sys-select-dawn-terminal.patch + cr124-libwebp-shim-sharpyuv.patch " -# Avoid conflicting providers -sonameprefix="$pkgname:" # tests are todo for some base checks options="!check net suid" -builddir="$srcdir/electron-$_gittag-$_chromium" +builddir="$srcdir/electron-$_semver-$_chromium" -export CC="/usr/lib/llvm$_llvmver/bin/clang" -export CXX="/usr/lib/llvm$_llvmver/bin/clang++" +export PATH="$PATH:/usr/lib/qt5/bin" + +export CC=clang +export CXX=clang++ # required to find the tools -export NM="/usr/lib/llvm$_llvmver/bin/llvm-nm" -export AR="/usr/lib/llvm$_llvmver/bin/llvm-ar" -export LD="/usr/lib/llvm$_llvmver/bin/clang++" +export AR=llvm-ar +export NM=llvm-nm +export LD=clang++ # less log spam, reproducible export CFLAGS="${CFLAGS/-g/} -O2 -Wno-builtin-macro-redefined -Wno-deprecated-declarations -Wno-shift-count-overflow -Wno-ignored-attributes" export CXXFLAGS="${CXXFLAGS/-g/} -O2 -Wno-builtin-macro-redefined -Wno-deprecated-declarations -Wno-invalid-constexpr" -# _LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE is set by project -export CXXFLAGS="${CXXFLAGS/-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_FAST/}" export CPPFLAGS="${CPPFLAGS/-g/} -D__DATE__= -D__TIME__= -D__TIMESTAMP__=" case "$CARCH" in aarch64|arm*|riscv64) @@ -192,10 +181,6 @@ esac # breaks chromium-based stuff export CXXFLAGS="${CXXFLAGS/-D_GLIBCXX_ASSERTIONS=1}" -# workaround to error: undefined symbol: __rustc::__rust_dealloc -# with 000*.patch patches -export RUSTC_BOOTSTRAP=1 - # creates a dist tarball that does not need to git clone everything at build time. _distbucket="sakamoto/lnl-aports-snapshots/" snapshot() { @@ -203,7 +188,6 @@ snapshot() { # vpython3 execs system python3 with this set export VPYTHON_BYPASS="manually managed python not supported by chrome operations" export CHROMIUM_BUILDTOOLS_PATH="$srcdir/src/buildtools" - export DEPOT_TOOLS_UPDATE=0 mkdir -p "$srcdir" cd "$srcdir" @@ -221,7 +205,7 @@ snapshot() { echo "solutions = [ { \"name\": \"src/electron\", - \"url\": \"https://github.com/electron/electron.git@$_gittag\", + \"url\": \"https://github.com/electron/electron.git@v$_semver\", \"deps_file\": \"DEPS\", \"managed\": False, \"custom_deps\": { @@ -236,8 +220,9 @@ snapshot() { --nohooks python3 src/build/landmines.py - python3 src/build/util/lastchange.py -m DAWN_COMMIT_HASH -s src/third_party/dawn \ - --revision src/gpu/webgpu/DAWN_VERSION --header src/gpu/webgpu/dawn_commit_hash.h + python3 src/build/util/lastchange.py -o src/build/util/LASTCHANGE + python3 src/build/util/lastchange.py -s src/third_party/dawn \ + --revision src/gpu/webgpu/DAWN_VERSION python3 src/build/util/lastchange.py -m GPU_LISTS_VERSION \ --revision-id-only --header src/gpu/config/gpu_lists_version.h python3 src/build/util/lastchange.py -m SKIA_COMMIT_HASH \ @@ -249,31 +234,28 @@ snapshot() { python3 src/electron/script/apply_all_patches.py \ src/electron/patches/config.json - mv src $pkgname-$_gittag-$_chromium + mv src $pkgname-$_semver-$_chromium # extra binaries are most likely things we don't want, so nuke them all - for elf in $(scanelf -RA -F "%F" $pkgname-$_gittag-$_chromium); do + for elf in $(scanelf -RA -F "%F" $pkgname-$_semver-$_chromium); do rm -f "$elf" done msg "generating tarball.. (this takes a while)" - tar -cf $pkgname-$_gittag-$_chromium.tar \ + tar -cf $pkgname-$_semver-$_chromium.tar \ --exclude="ChangeLog*" \ --exclude="testdata/*" \ --exclude="test_data/*" \ --exclude="android_rust_toolchain/*" \ - --exclude="third_party/instrumented_libs/binaries" \ --exclude-backups \ --exclude-caches-all \ --exclude-vcs \ - $pkgname-$_gittag-$_chromium + $pkgname-$_semver-$_chromium - zstd --auto-threads=logical --ultra --long -22 -T"${ZSTD_LIMIT:-0}" -vv $pkgname-$_gittag-$_chromium.tar -o "$SRCDEST"/$pkgname-$_gittag-$_chromium.tar.zst - mcli cp "$SRCDEST"/$pkgname-$_gittag-$_chromium.tar.zst "$_distbucket" + zstd --auto-threads=logical --ultra --long -22 -T"${ZSTD_LIMIT:-0}" -vv $pkgname-$_semver-$_chromium.tar -o "$SRCDEST"/$pkgname-$_semver-$_chromium.tar.zst + mcli cp "$SRCDEST"/$pkgname-$_semver-$_chromium.tar.zst "$_distbucket" } -export RUSTC_BOOTSTRAP=1 - prepare() { default_prepare @@ -285,7 +267,7 @@ prepare() { ;; esac done - if [ -n "$failed" ]; then + if [ ! -z "$failed" ]; then error "The following patches failed to apply:" for i in $failed; do printf " %s\n" "$i" >&2 @@ -309,9 +291,9 @@ prepare() { git config commit.gpgsign false git add LICENSE git commit -m "init" - git tag "$_gittag" + git tag "v$_semver" git pack-refs - yarn install --immutable --mode=skip-build + yarn install --frozen-lockfile --no-scripts ) ( @@ -319,19 +301,12 @@ prepare() { ./update_npm_deps ) - # generate dawn_commit_hash - # TODO: remove on next update as it'll be generated after - # https://ayakael.net/mirrors/electron/commit/7623f4a14ab44fa4f4343e47d9d681c9b4aa984c - python3 build/util/lastchange.py -m DAWN_COMMIT_HASH -s third_party/dawn \ - --revision gpu/webgpu/DAWN_VERSION --header gpu/webgpu/dawn_commit_hash.h - # reusable system library settings # flatbuffers - tensorflow has a few static_asserts for a specific patch version # libavif - https://github.com/AOMediaCodec/libavif/commit/50a541469c98009016af8dcc9f83a1be79f3a7d9 # libaom - https://aomedia.googlesource.com/aom/+/706ee36dcc82%5E%21/ # but watch this space: https://aomedia-review.googlesource.com/c/aom/+/188606 - # jsoncpp, re2, snappy, swiftshader-*, woff2 - requires use_custom_libcxx=false - # icu 76 does not build - https://bugs.gentoo.org/943216 + # jsoncpp, re2, snappy, swiftshader, vulkan, woff2 - needs use_custom_libcxx=false local chromium_use_system=" brotli crc32c @@ -343,7 +318,9 @@ prepare() { freetype harfbuzz-ng highway + icu libdrm + libevent libjpeg libsecret libusb @@ -352,14 +329,12 @@ prepare() { libxslt openh264 opus - simdutf zlib zstd " - for _lib in $chromium_use_system jinja2 libjpeg_turbo unrar; do + for _lib in $chromium_use_system jinja2 libjpeg_turbo; do msg "Removing buildscripts for system provided $_lib" - _lib="${_lib/swiftshader-/swiftshader/third_party/}" find . -type f -path "*third_party/$_lib/*" \ \! -path "*third_party/$_lib/chromium/*" \ \! -path "*third_party/$_lib/google/*" \ @@ -372,9 +347,10 @@ prepare() { -delete done + # llhttp - 9.x needed, 8.x in repo (2023-12-17) # ada - needs use_custom_libcxx=false local node_use_system=" - llhttp + base64 brotli cares corepack @@ -411,12 +387,6 @@ prepare() { $chromium_use_system python3 third_party/libaddressinput/chromium/tools/update-strings.py - # flatc is used in build workflows since https://crrev.com/c/5595037, - # but the pre-generated files are still checked-in. remove to make sure - # they're not used. (if used, they will break builds on version mismatch.) - # https://github.com/tensorflow/tensorflow/issues/62298 - # find third_party/tflite/ -name '*_generated.h' -delete - # prevent annoying errors when regenerating gni sed -i 's,^update_readme$,#update_readme,' \ third_party/libvpx/generate_gni.sh @@ -429,9 +399,8 @@ prepare() { sed -i -e 's/\/malloc/' -e 's/\/free/' \ third_party/blink/renderer/core/xml/*.cc \ third_party/blink/renderer/core/xml/parser/xml_document_parser.cc \ - third_party/libxml/chromium/*.cc - - echo "$CTARGET" >> build/rust/known-target-triples.txt + third_party/libxml/chromium/*.cc \ + third_party/maldoca/src/maldoca/ole/oss_utils.h _configure } @@ -440,6 +409,8 @@ _configure() { cd "$builddir" msg "Configuring build" + local clang_ver="$(clang -dumpversion)" + case "$USE_CCACHE" in 1) local cc_wrapper="ccache" @@ -462,13 +433,14 @@ _configure() { chrome_pgo_phase=0 clang_base_path=\"/usr\" clang_use_chrome_plugins=false - clang_version=\"$_llvmver\" + clang_version=\"${clang_ver%%.*}\" custom_toolchain=\"//build/toolchain/linux/unbundle:default\" disable_fieldtrial_testing_config=true enable_hangout_services_extension=true + enable_nacl=false enable_nocompile_tests=false - enable_rust=true enable_stripping=false + enable_rust=true enable_vr=false fatal_linker_warnings=false ffmpeg_branding=\"Chrome\" @@ -478,20 +450,16 @@ _configure() { is_clang=true is_component_ffmpeg=true is_debug=false - is_musl=true is_official_build=true link_pulseaudio=true - node_version_check=false proprietary_codecs=true + regenerate_x11_protos=true rtc_link_pipewire=true rtc_use_pipewire=true rustc_version=\"yes\" - rust_bindgen_root=\"/usr\" rust_sysroot_absolute=\"/usr\" - safe_browsing_use_unrar=false symbol_level=$symbol_level treat_warnings_as_errors=false - use_clang_modules=false use_custom_libcxx=true use_lld=true use_pulseaudio=true @@ -505,11 +473,12 @@ _configure() { skia_use_dawn=false use_dawn=false use_system_ada=false + use_system_base64=true use_system_cares=true use_system_histogram=true use_system_lcms2=true use_system_libffi=true - use_system_llhttp=true + use_system_llhttp=false use_system_nghttp2=true " @@ -519,13 +488,17 @@ _configure() { } build() { - export ELECTRON_OUT_DIR="$builddir"/out/Release/ + export PATH="$PATH:/usr/lib/qt5/bin" - ninja -C out/Release \ - copy_node_headers \ + # ~1 GB per concurrent job is not enough with gcc + _njobs="${NJOBS:-"$(python3 -c 'import os; print(max((os.cpu_count() - (10 if os.uname().machine == "aarch64" else 8), 1)))')"}" + + ninja -C out/Release -j$_njobs \ electron_dist_zip \ node_gypi_headers \ node_version_header + + cp -vf out/Release/gen/node_headers/include/node/config.gypi third_party/electron_node/config.gypi } package() { @@ -539,7 +512,13 @@ package() { install -Dm755 "$srcdir"/default.conf "$pkgdir"/etc/electron/default.conf mkdir -p "$pkgdir"/usr/include/electron - cp -rv "$builddir"/out/Release/gen/node_headers "$pkgdir"/usr/include/electron + + ( + cd third_party/electron_node/ + HEADERS_ONLY=1 python3 ./tools/install.py install "$pkgdir" "/usr/include/electron/node_headers" + ) + # required overrides + install -Dm644 out/Release/gen/node_headers/include/node/* -t "$pkgdir"/usr/include/electron/node_headers/include/node ln -sv /usr/include/electron/node_headers/include/node "$pkgdir"/usr/include/electron/node mkdir -p "$pkgdir"/usr/include/electron/node_headers/include/nan @@ -565,37 +544,41 @@ lang() { } sha512sums=" -6dc7161f6df396e2b7569b0a607e264b43a2d7215de65164dc2ca04c019df93ea0a67dec2490071c09c8a03f90605faaf3880f2d843f838bb5d841bba204c298 electron-v39.2.7-142.0.7444.235.tar.zst -30b298549804e7753b0b639b72417ba081e964676862b6c7d73ad73cdf806883f20e4a4b36e67a6c375eaf2dd97686cf21b90b062400d3b61fba86da4d239bfa copium-142.0.tar.gz -69b45005451ccd69c354b4c2910e92371cb801665f5e300dbecd36f8bc4ce68e77a431b5dac07c0937787debb4e93b7aadefa0a1e76c4ae334d2547ca3ca14ff 0001-hotfix-ignore-a-new-warning-in-rust-1.89.patch -dc254dd79e135aeac3e9c03eb055e3bc17980fc213f8c4d8d7921a575be7f9c26b91f110a6dcb01c0a824a7d9375c09f8a61c8858c20c11d79c03f873e2cb3f9 compiler.patch -1bee1448e409fedff635388ee6f1efa6d23c29ae3e6b6fd31452c56974adb40fcd0088c82d1e643d549154663e402942cbab9807dff5aff2d8997a09de6f5655 disable-dns_config_service.patch -0ef9168b8b1a4779bc4c8df718735e06d29e459dcfd00f8cbf9a4edaf9fade8089225219e46dead7de81de716bddc8d745dc2069db0ee7f7e5d2f64c5236e2ab disable-failing-tests.patch -0050857a9a9553c10fd502fe70606bce48269c9b48fa82ce9e111575637a0c03578e923c82fc639fcb574fc3337aeef50d8a0aea5e512ae4eab83b8c3d732cf6 fc-cache-version.patch -87f63d83139562e058f3f649eb1f62bf100dd92c2bb6ee393fdce0c8f7d7c188a7062394647aafe4e82c0a8fbbffeb613edc5c8dd9415dd9dda777827ea371c5 fix-ffmpeg-codec-list.patch +97024407a16fb41ec56fcc6df5552165ce4eea34fc51b17ecbf30a7e35406baccf8a3001a795a06d1e92d32e134d9d7a18d59fa74eda1b1bc23b59bc4947929b electron-30.0.9-124.0.6367.233.tar.zst +13c647dc2024e27ae8a4d7e8f1202037a342f4a7054477226665c332029e1b6f1d8b99004c2b2809bcf1e6c19b1359ef5e1c971552d7ced59c5b43d5a836af88 copium-124.5.tar.gz +29bb685e03356a77df5fd347cdf55194cc8b3265c421cc76e54d64edefc329dbcb052deb26b22e8f587ce68456876c071de1b7d258dd0fcc6ee66c875ec4a020 chromium-revert-drop-of-system-java.patch +54eb147c0af2ba096d1df375a289b339ee855ab1a9114e7c747753f0274a6bafb7212c1859b7885454c4529d9a5e3bd9559fc14e8e006f23ccd381895fa68d15 compiler.patch +4057cc78f10bfd64092bc35a373869abb1d68b880cdbca70422f39ffd78a929c19c7728d4d4c40709aaba25581148a93ae5343e724849fd35323062ed68753fa disable-dns_config_service.patch +111bc22fb704d97759988268a40d6b356c51b0bd7a8119a694e905ffe21850ff64e91566cd0dd0c9d62fcb46dca8acc821436c34eb0ba78be872ee4f7ec88a7b disable-failing-tests.patch +5fc5c012c1db6cf1ba82f38c6f3f4f5ca3a209e47ac708a74de379b018e0649b7694877c9571ef79002dde875ffc07b458a3355425f1c01867f362c66c2bc1bf fc-cache-version.patch +9200f78bad70e95c648a5e8392d50642190600f655c6baa366ff6467ebad52d3b3f305dad58f3610da67136f4b723557653b174ec5c25be8d8737ee04d9ee09f fix-missing-cstdint-include-musl.patch +b24563e9a738c00fce7ff2fbdee3d7c024d9125d7c74d9ab90af6bdb16f7ec8419f2c8aa78c0640f6d5d81c17dc2c673a194401d354f466749672729b48ed068 fix-opus.patch c63dee5044353eb306a39ca1526158c0f003ab310ecb03d1c368dc2a979454590c84b8d3c15484517d5e66bb8add9b231da9abbadf2e50850abd72ac1345c4ab fstatat-32bit.patch 33ee60863cc438ef57ffef92ba4cf67a856a5ffc16138bce241bcf87e47b15154aa86918e793c26f7ec4dc62a445257ad5673ed7001daf22c4043cf6cc57da7f gdbinit.patch 36a764fa73443b47d38050b52dbe6ad2fa8d67201ff4ccdbad13b52308ef165ca046aac6f9609fe35890a6485f0f3e672e78cc41e3e44f3cdc7f145e540524e8 generic-sensor-include.patch -a94cf7a0670abf5178abba33c619cc6d41d73f2e16c7a1fd5b152152f5077df103e049d166e3b8627797c38113821d2f2e6b64cd48d132c1e90ad32d63a349f5 headless-shell-no-license.patch -51f1959bd622af26a1c3a1f4b0ad9a5bfa461057aa4cf9960c568dddf8ac47d55989c277f5d5ab5db040a04c54925a531af7a1cc767559218b408eaa6bdd7577 musl-sandbox.patch +8de65109ece27ea63bd469f2220c56b8c752ba0a50fdf390082a2d5ae74b8e010199126175569f6d5084270dd4e0571e68aec32c0bca8211a6699925b3a09124 import-version.patch +c49a1b06e061faa430d66dd5b404ef6c843e4d8a6e9012e963009a161b4726f8eb92c4da8fa710f8861f6e4daa8be5f68abee41a7d9fc02f2a0eb61ce53b5fdd libstdc++13.patch +e75f57ae34c97ca1caf15fa4b4106c6c1e79c31ed66869cf92ed9ea0c449886c9511e455047c17c1e9ad8b9a46ad4948511a4f2995a4b6030fb4d1c7ae21d038 mman.patch +99bcc7dd485b404a90c606a96addab1d900852128d44fb8cea8acc7303189ef87c89a7b0e749fd0e10c5ef5f6bf1fadeb5c16a34503cab6a59938ce2653d887e musl-auxv.patch +50c274a420bb8a7f14fcb56e40920dac8f708792a4520789b4987facea459bef88113d5a2b60fa8c57bee6e92bff3617d6b73fa305c8c44614c638971cffd440 musl-sandbox.patch e7163ac5810ac85366cef2447412287c856e3d67c6b77f219a6e5a418b1965b98e449c409424ad0704a5bded9355dd0aec3dc4585918ce5a2ab36c079707afe2 musl-tid-caching.patch -3b7420d58d13dfc4baab5065e3017f666f51fed6de087af42a660a839d7b4444b50d1a93204322d213df36c6722eaf6b08d46d50dc374198a342da2675fafff5 net-test-no-vpython.patch -e487662b6606ea526ddd716c31e6b9ad3d61f1bee5356cd94b78a903efb3928338cbb48e3d5840b34c3b70a71e8361a228430bd50e707ad301228a7049d59e37 net-test-pyws3-py3.12.patch -a250cff50d282b02ce0f28880d0a2b4fb8e7df51bc072bfeeddc561c29a7c76453dbcbc7b17b82966a7b30a31409d2555720d1dcf963e1b3fb8a2a06a6abcf46 no-execinfo.patch -0b41aeb6b212f9c3f61aa0a8d3085c9e865a2e68f3270ceec2376aab67f337ac46eaea7da36d3fd7219e2a1cb731b7aa2d3fb619a374d2b7653976b9f4f384bb no-mallinfo.patch +92eb002718026611f5542362ad69b67f0a398ff71b3fca5c05d55cb5c6f9f29334e5e127bb4860cfaa3fba0f0d4c901e2b98808217e7dc02e254a64a5c9521aa musl-v8-monotonic-pthread-cont_timedwait.patch +73bca6c6f9873f2f11cef04f3f41f71e0ae86e7e2d77e14db4298675fec390744c5081f6fdb14052e5ee2b5885be1198c3aa6068eb2b656d1a665c0c3f36e708 no-execinfo.patch +8e17101d69e23b456a9c03dc2fe95bcd56846389707ba6f4720192a9e9168406d20d9168dbebbb3a47d921ec92e478f0e390f46e6b9bb43a34dda217c6e6448b no-mallinfo.patch e4c4e5bc6f828f9c883dd418c0ba01887949c29c311f76206a1ec29f620b0c0ba0452949dc2778a9c46ea066405857536964a36436a68eecf7da7952736333cf no-res-ninit-nclose.patch 6dc4d8dc92e685dace62265a1ddb3aebc558aed54d20ff6d36b030be0c48d7e84662326c31363612492574d9a03c62653cdc21a60995b97dee1d75cae86a9f9b no-sandbox-settls.patch -b75908a45ee2f4f806eec8d86fca2f51fda3531b88de48ef4539c364a40d7e2897cdaf38b715682d712648e3f43aac983055e688385f85fa7b7204ffb6d617e1 partalloc-no-tagging-arm64.patch -03f829a2da633533ef3fd0f287f5ec602d936a97a98b53cd2415553c2537ae9d571f35397ca7c9fb3f4b0806c300e3b189569f8d979ca132e1a2a4dae7206396 pvalloc.patch +d4ac7f350806b4410ccb1df3b0ad7e90a7b6d724a16919761aa2d47a6f21008c7374da528b05b754ee712b85d23adfb113c7f7b9ca2ed5b47644fe3ea0cb9119 partalloc-no-tagging-arm64.patch +8e1aca983890c78d81a6f888b2cf1aa42878d1f8523e87d63b800e1e468cbfd33e5ff6a0975775ca222fe82f30c6497da95505da01b091c8776a44c98ac86f0f perfetto-libstdc++.patch +2eb434b4fc6aee77026492644cd86772a543d9845f112a75cd4c3e1f25c9435cc31f8454c1c73223451fc9be69b86e822ff68821978f67f2fc8bcba50296d8e0 pvalloc.patch +803b8117c65132f76bec42054a4b2257a078b15b07fd08645fec2dfd51aa4e0075a9015300cd579d4ae0d757d9850b9988e080cfc2eea093f6684fdf82c4722c random-fixes.patch +86f612dd2b39602984a75b1b11c2ab8bc8cc6b4e78fae998570a777a6901ae45fdcdb22e46dd006dab703a0674e64c72cf8120af2dc5b9e78004f402c7e65358 quiche-array.patch +b3beb98b539fe160fbc493ba410ae0f68540cc4b6834f1f8ce9a22c3f4f59ef5d583ad48793e10549fd02a701f833a3969791ef4524322cd1e715ca5bf226bc8 system-zstd.patch e48693e6b7aeebf69a5acbf80d9a35defe4c23835121dfeb58b051ac7c527e758a41004f4d193274fe1b01c0bfb1dbc77b09cb6a404a3fdee507a2918afb0edb temp-failure-retry.patch -465107da7818b237e3c144a318ab80c3c9343b51ed38b8971ef204692d13346929becbe94cefad4c153788d3a200642143584d5ca070f6304e768ba2139c19ec electron_icon.patch -e05180199ee1d559e4e577cedd3e589844ecf40d98a86321bf1bea5607b02eeb5feb486deddae40e1005b644550331f6b8500177aa7e79bcb3750d3c1ceb76c3 electron_python-jinja-3.10.patch -2aa340854316f1284217c0ca17cbf44953684ad6c7da90815117df30928612eb9fb9ffb734b948dfc309cd25d1a67cd57f77aac2d052a3dd9aca07a3a58cbb30 electron_webpack-hash.patch -c7f57929943a86f9e5f333da9d5691da88038770eeb46dd0a0719962c934deb2879f0e7a1ed714e9383e38ee4d68eb754501f362c4d7cdee76cfc2e980b21272 electron_unbundle-node.patch -4d9287d4cdfe27fbfb7be3d4b26c0c40edbd6a0c3ff926d60f2093ca09c15bcb58e20c2ccc8c0606aafd66c6d25a54225bc329cb056d8c5b297db4c6d0e768e6 electron_system-zlib-headers.patch -7031ddb61a858e95d83366185a53b5a2e4be9abe0aa4957543e0621cad57175ffef31bd87b8be25255184bb4cb30ec4fbced055407c6c8c7940c9e240b25d498 electron_do-not-strip-binaries.patch -0f8f36c21cc50c80e378691265845ff10fa53953d6cd5352fe71efcba489f956e50d374d8f634dadc3569c4901a81a1f308a3e69140c0f9136e0777022b9520f electron_shell-file-dialog-drop-glibc.patch -3fd20144ed171cf9706899a1481141c7fa3e98b17d600cdc5a3a68ba39059cebd9e5ccb5534af3e262f689df381bc3cb630ac24e46dd6f6c72eac4f4b6b14b35 electron_use-system-yarn.patch +914ccf649d7771f19f209ab97f99c481aebc6f66174d68e8b539f6ad4a70bc8cb0fae2df6dadbf0415958ffb3574c420fe029079dcce45f5e5add4db2e903566 yes-musl.patch +465107da7818b237e3c144a318ab80c3c9343b51ed38b8971ef204692d13346929becbe94cefad4c153788d3a200642143584d5ca070f6304e768ba2139c19ec icon.patch +e05180199ee1d559e4e577cedd3e589844ecf40d98a86321bf1bea5607b02eeb5feb486deddae40e1005b644550331f6b8500177aa7e79bcb3750d3c1ceb76c3 python-jinja-3.10.patch +2aa340854316f1284217c0ca17cbf44953684ad6c7da90815117df30928612eb9fb9ffb734b948dfc309cd25d1a67cd57f77aac2d052a3dd9aca07a3a58cbb30 webpack-hash.patch +ebb18a0e2eba4b4606e900fa82f4b57fe91dcbdc943e17544bccb3c9a011a49b4331cdbee59629e44b80184bad4ea54ec887c0bfcd00cda8d5686060dbf365e3 unbundle-node.patch e8ea87c547546011c4c8fc2de30e4f443b85cd4cfcff92808e2521d2f9ada03feefb8e1b0cf0f6b460919c146e56ef8d5ad4bb5e2461cc5247c30d92eb4d068e default.conf 191559fc7aa1ea0353c6fb0cc321ee1d5803a0e44848c8be941cfab96277b0de6a59962d373e2a2a1686c8f9be2bcf2d2f33706759a339a959e297d3f7fda463 electron.desktop 5f7ba5ad005f196facec1c0f26108356b64cafb1e5cfa462ff714a33b8a4c757ac00bfcb080da09eb5b65032f8eb245d9676a61ec554515d125ed63912708648 electron-launcher.sh diff --git a/backports/electron/README.md b/backports/electron/README.md deleted file mode 100644 index 2a12409..0000000 --- a/backports/electron/README.md +++ /dev/null @@ -1,59 +0,0 @@ -# electron - -This is the `electron` package for Alpine Linux. - -Please report any issues [using Gitlab](https://gitlab.alpinelinux.org/alpine/aports/-/issues/new) and tag @ayakael - -## Building electron - -Electron is an application framework based on `chromium`. Just like `chromium`, -and any Google application, the build process is a form of [hostile -architecture] (https://en.wikipedia.org/wiki/Hostile_architecture) It's quite -literally chromium with patches applied on top for the most part. The build -process applies a series of git patches against `chromium` from directories -with a script. - -Its source code isn't available as a downloadable tarball. It is only fetchable -using Google's `gclient` available in `depot_tools` with a reimplemented -version in the `teapot` package. By executing, `abuild snapshot`, the tarball -can be fetched and packaged, as long as `gclient` is in your path. For ease of -maintenance, a workflow on [Ayakael's Forge](https://ayakael.net/mirrors/electron) -automatically fetches and packages the source code on new releases and makes it -available in a [generic Forgejo repository](https://ayakael.net/mirrors/-/packages/generic/electron). - -## Electron maintenance cycle - -Security / bug fixes land from upstream land randomly, but chromium security fixes land -basically weekly around Tuesday in `America/Los_Angeles`. Minor relases only require -an upgrade to the `electron` packages. It is advisable to follow chromium weekly -security fixes, although following `electron` minor releases is fine. - -Major version upgrades require a more thorough approach. For one, most changes -can be backported from `chromium` APKBUILD by diffing the previous version -packaged with `electron` with the current (set with `_chromium` var). You also -need to rebuild all `electron` apps, with patches sometimes necessary when -upstream bumps to a new `nodejs` major verion. Major electron releases are -every two `chromium` major releases, with [dates known well ahead] -(https://chromiumdash.appspot.com/schedule) with a few major releases of -`electron` [officially supported at a time](https://www.electronjs.org/docs/latest/tutorial/electron-timelines). - -Steps, in a nutshell: - -1. Set `pkgver` to up-to-date version - -2. Optional: fetch source-code using `abuild snapshot`, making sure `gclient` -is in your path - -3. Update source checksum using `abuild checksum` - -4. If major update, backport changes from `chromium` aport and bump `pkgrel` -for all electron-based applications. - -## Why is this package still in testing - -[Work is under way](https://gitlab.alpinelinux.org/alpine/aports/-/issues/15760) -to make this aport ready for `community` - -Until that happens, this package is also kept-to-date against the latest -release of Alpine Linux in [Ayakael's Forge](https://ayakael.net/forge/-/packages/alpine/signal-desktop) -This is true of all Ayakael's packages still in `testing`. diff --git a/backports/electron/chromium-revert-drop-of-system-java.patch b/backports/electron/chromium-revert-drop-of-system-java.patch new file mode 100644 index 0000000..24355bf --- /dev/null +++ b/backports/electron/chromium-revert-drop-of-system-java.patch @@ -0,0 +1,17 @@ +This was dropped for some reason in 6951c37cecd05979b232a39e5c10e6346a0f74ef +allows using /usr/bin/java instead of a downloaded one (that doesn't work on musl) +-- +--- a/third_party/closure_compiler/compiler.py 2021-05-20 04:17:53.000000000 +0200 ++++ b/third_party/closure_compiler/compiler.py 2021-05-20 04:17:53.000000000 +0200 +@@ -13,8 +13,9 @@ + + + _CURRENT_DIR = os.path.join(os.path.dirname(__file__)) +-_JAVA_PATH = os.path.join(_CURRENT_DIR, "..", "jdk", "current", "bin", "java") +-assert os.path.isfile(_JAVA_PATH), "java only allowed in android builds" ++_JAVA_BIN = "java" ++_JDK_PATH = os.path.join(_CURRENT_DIR, "..", "jdk", "current", "bin", "java") ++_JAVA_PATH = _JDK_PATH if os.path.isfile(_JDK_PATH) else _JAVA_BIN + + class Compiler(object): + """Runs the Closure compiler on given source files to typecheck them diff --git a/backports/electron/compiler.patch b/backports/electron/compiler.patch index 41b9b08..fedc978 100644 --- a/backports/electron/compiler.patch +++ b/backports/electron/compiler.patch @@ -1,12 +1,14 @@ --- ./build/config/compiler/BUILD.gn.orig +++ ./build/config/compiler/BUILD.gn -@@ -658,22 +658,6 @@ +@@ -613,24 +613,6 @@ } } -- # TODO(crbug.com/40283598): This causes binary size growth and potentially +- # TODO(crbug.com/1488374): This causes binary size growth and potentially - # other problems. -- if (default_toolchain != "//build/toolchain/cros:target") { +- # TODO(crbug.com/1491036): This isn't supported by Cronet's mainline llvm version. +- if (default_toolchain != "//build/toolchain/cros:target" && +- !llvm_android_mainline) { - cflags += [ - "-mllvm", - "-split-threshold-for-reg-with-hint=0", @@ -20,94 +22,50 @@ - } - } - - # TODO(crbug.com/40192287): Investigate why/if this should be needed. + # TODO(crbug.com/1235145): Investigate why/if this should be needed. if (is_win) { cflags += [ "/clang:-ffp-contract=off" ] -@@ -1273,8 +1257,8 @@ - # simplicity we always explicitly set the architecture. - if (current_cpu == "x64") { - if (is_clang && !is_android && !is_fuchsia && !is_chromeos_device) { -- cflags += [ "--target=x86_64-unknown-linux-gnu" ] -- ldflags += [ "--target=x86_64-unknown-linux-gnu" ] -+ cflags += [ "--target=x86_64-alpine-linux-musl" ] -+ ldflags += [ "--target=x86_64-alpine-linux-musl" ] - } else { - cflags += [ "-m64" ] - ldflags += [ "-m64" ] -@@ -1282,8 +1266,8 @@ - cflags += [ "-msse3" ] - } else if (current_cpu == "x86") { - if (is_clang && !is_android && !is_chromeos_device) { -- cflags += [ "--target=i386-unknown-linux-gnu" ] -- ldflags += [ "--target=i386-unknown-linux-gnu" ] -+ cflags += [ "--target=i586-alpine-linux-musl" ] -+ ldflags += [ "--target=i586-alpine-linux-musl" ] - } else { - cflags += [ "-m32" ] - ldflags += [ "-m32" ] -@@ -1294,8 +1278,8 @@ - ] +@@ -1005,17 +987,6 @@ + # `-nodefaultlibs` from the linker invocation from Rust, which would be used + # to compile dylibs on Android, such as for constructing unit test APKs. + "-Cdefault-linker-libraries", +- +- # To make Rust .d files compatible with ninja +- "-Zdep-info-omit-d-target", +- +- # If a macro panics during compilation, show which macro and where it is +- # defined. +- "-Zmacro-backtrace", +- +- # For deterministic builds, keep the local machine's current working +- # directory from appearing in build outputs. +- "-Zremap-cwd-prefix=.", + ] + + if (!is_win || force_rustc_color_output) { +@@ -1182,8 +1153,8 @@ } else if (current_cpu == "arm") { - if (is_clang && !is_android && !is_chromeos_device) { + if (is_clang && !is_android && !is_nacl && + !(is_chromeos_lacros && is_chromeos_device)) { - cflags += [ "--target=arm-linux-gnueabihf" ] - ldflags += [ "--target=arm-linux-gnueabihf" ] + cflags += [ "--target=armv7-alpine-linux-musleabihf" ] + ldflags += [ "--target=armv7-alpine-linux-musleabihf" ] } - cflags += [ - "-march=$arm_arch", -@@ -1306,8 +1290,8 @@ - } + if (!is_nacl) { + cflags += [ +@@ -1197,8 +1168,8 @@ } else if (current_cpu == "arm64") { - if (is_clang && !is_android && !is_fuchsia && !is_chromeos_device) { + if (is_clang && !is_android && !is_nacl && !is_fuchsia && + !(is_chromeos_lacros && is_chromeos_device)) { - cflags += [ "--target=aarch64-linux-gnu" ] - ldflags += [ "--target=aarch64-linux-gnu" ] + cflags += [ "--target=aarch64-alpine-linux-musl" ] + ldflags += [ "--target=aarch64-alpine-linux-musl" ] } - } else if (current_cpu == "mipsel") { + } else if (current_cpu == "mipsel" && !is_nacl) { ldflags += [ "-Wl,--hash-style=sysv" ] -@@ -1551,22 +1535,22 @@ - ldflags += [ "-maix64" ] - } - } else if (is_clang) { -- cflags += [ "--target=powerpc64le-unknown-linux-gnu" ] -- ldflags += [ "--target=powerpc64le-unknown-linux-gnu" ] -+ cflags += [ "--target=powerpc64le-alpine-linux-musl" ] -+ ldflags += [ "--target=powerpc64le-alpine-linux-musl" ] - } else { - cflags += [ "-m64" ] - ldflags += [ "-m64" ] - } - } else if (current_cpu == "riscv64") { - if (is_clang && !is_android) { -- cflags += [ "--target=riscv64-linux-gnu" ] -- ldflags += [ "--target=riscv64-linux-gnu" ] -+ cflags += [ "--target=riscv64-alpine-linux-musl" ] -+ ldflags += [ "--target=riscv64-alpine-linux-musl" ] - } - cflags += [ "-mabi=lp64d" ] - } else if (current_cpu == "loong64") { - if (is_clang) { -- cflags += [ "--target=loongarch64-linux-gnu" ] -- ldflags += [ "--target=loongarch64-linux-gnu" ] -+ cflags += [ "--target=loongarch64-alpine-linux-musl" ] -+ ldflags += [ "--target=loongarch64-alpine-linux-musl" ] - } - cflags += [ - "-mabi=lp64d", -@@ -1574,8 +1558,8 @@ - ] - } else if (current_cpu == "s390x") { - if (is_clang) { -- cflags += [ "--target=s390x-unknown-linux-gnu" ] -- ldflags += [ "--target=s390x-unknown-linux-gnu" ] -+ cflags += [ "--target=s390x-alpine-linux-musl" ] -+ ldflags += [ "--target=s390x-alpine-linux-musl" ] - } - cflags += [ "-m64" ] - ldflags += [ "-m64" ] -@@ -2274,7 +2258,7 @@ +@@ -1983,7 +1954,7 @@ defines = [ "_HAS_NODISCARD" ] } } else { @@ -118,7 +76,7 @@ cflags += [ "-Wextra" ] --- ./build/config/rust.gni.orig +++ ./build/config/rust.gni -@@ -178,11 +178,11 @@ +@@ -186,11 +186,11 @@ rust_abi_target = "" if (is_linux || is_chromeos) { if (current_cpu == "arm64") { @@ -133,32 +91,16 @@ } else if (current_cpu == "arm") { if (arm_float_abi == "hard") { float_suffix = "hf" -@@ -200,25 +200,21 @@ - # The thumbv7 vs. armv7 distinction is for legacy reasons and both - # targets in fact target Thumb, see: - # https://github.com/rust-lang/rust/issues/44722 -- if (arm_use_neon) { -- rust_abi_target = "thumbv7neon-unknown-linux-gnueabi" + float_suffix -- } else { -- rust_abi_target = "armv7-unknown-linux-gnueabi" + float_suffix -- } +@@ -199,13 +199,13 @@ + } + if (arm_arch == "armv7-a" || arm_arch == "armv7") { + # No way to inform Rust about the -a suffix. +- rust_abi_target = "armv7-unknown-linux-gnueabi" + float_suffix + rust_abi_target = "armv7-alpine-linux-musleabi" + float_suffix } else { - rust_abi_target = "arm-unknown-linux-gnueabi" + float_suffix + rust_abi_target = "armv6-alpine-linux-musleabi" + float_suffix } - } else if (current_cpu == "riscv64") { -- rust_abi_target = "riscv64gc-unknown-linux-gnu" -+ rust_abi_target = "riscv64-alpine-linux-musl" - } else if (current_cpu == "ppc64") { -- rust_abi_target = "powerpc64le-unknown-linux-gnu" -+ rust_abi_target = "powerpc64le-alpine-linux-musl" - } else if (current_cpu == "s390x") { -- rust_abi_target = "s390x-unknown-linux-gnu" -+ rust_abi_target = "s390x-alpine-linux-musl" - } else if (current_cpu == "loong64") { -- rust_abi_target = "loongarch64-unknown-linux-gnu" -+ rust_abi_target = "loongarch64-alpine-linux-musl" } else { # Best guess for other future platforms. - rust_abi_target = current_cpu + "-unknown-linux-gnu" @@ -168,9 +110,9 @@ import("//build/config/android/abi.gni") --- ./build/config/clang/BUILD.gn.orig +++ ./build/config/clang/BUILD.gn -@@ -207,22 +207,23 @@ - assert(false) # Unhandled cpu type - } +@@ -128,14 +128,15 @@ + } else if (is_apple) { + _dir = "darwin" } else if (is_linux || is_chromeos) { + _dir = "linux" if (current_cpu == "x64") { @@ -185,18 +127,6 @@ } else if (current_cpu == "arm64") { - _dir = "aarch64-unknown-linux-gnu" + _suffix = "-aarch64" - } else if (current_cpu == "loong64") { -- _dir = "loongarch64-unknown-linux-gnu" -+ _suffix = "-loongarch64" - } else if (current_cpu == "riscv64") { -- _dir = "riscv64-unknown-linux-gnu" -+ _suffix = "-riscv64" - } else if (current_cpu == "ppc64") { -- _dir = "ppc64le-unknown-linux-gnu" -+ _suffix = "-powerpc64le" - } else if (current_cpu == "s390x") { -- _dir = "s390x-unknown-linux-gnu" -+ _suffix = "-s390x" } else { assert(false) # Unhandled cpu type } diff --git a/backports/electron/disable-dns_config_service.patch b/backports/electron/disable-dns_config_service.patch index 731a751..a72e1c4 100644 --- a/backports/electron/disable-dns_config_service.patch +++ b/backports/electron/disable-dns_config_service.patch @@ -2,7 +2,7 @@ diff --git a/net/dns/BUILD.gn b/net/dns/BUILD.gn index f36bf68..805d9a6 100644 --- a/net/dns/BUILD.gn +++ b/net/dns/BUILD.gn -@@ -142,8 +142,8 @@ +@@ -130,8 +130,8 @@ source_set("dns") { ] } else if (is_linux) { sources += [ @@ -13,11 +13,3 @@ index f36bf68..805d9a6 100644 ] } else if (is_posix) { sources += [ -@@ -455,7 +455,6 @@ - if (is_android) { - sources += [ "dns_config_service_android_unittest.cc" ] - } else if (is_linux) { -- sources += [ "dns_config_service_linux_unittest.cc" ] - } else if (is_posix) { - sources += [ "dns_config_service_posix_unittest.cc" ] - } diff --git a/backports/electron/disable-failing-tests.patch b/backports/electron/disable-failing-tests.patch index 9351ea0..2ee8f2b 100644 --- a/backports/electron/disable-failing-tests.patch +++ b/backports/electron/disable-failing-tests.patch @@ -2,6 +2,86 @@ safesprintf emitnull: error: conversion from 'std::nullptr_t' to 'const internal::Arg' is ambiguous const internal::Arg arg_array[] = { args... }; +flatmap incompletetype: + error: static assertion failed due to requirement 'std::__is_complete_or_unbounded(std::__type_identity>{})': template argument must be a complete class or an unbounded array + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + +i18n, time: + various icu failures (new icu time formatting? internal api difference?) + a ton of these fail: + + Expected equality of these values: + u"Monday 16 May – Saturday 28 May" + Which is: u"Monday 16 May \x2013 Saturday 28 May" + DateIntervalFormat(begin_time, end_time, DATE_FORMAT_MONTH_WEEKDAY_DAY) + Which is: u"Monday 16\x2009\x2013\x2009Saturday 28 May" + + ../../base/i18n/time_formatting_unittest.cc:84: Failure + Expected equality of these values: + clock12h_pm + Which is: u"3:42 PM" + TimeFormatTimeOfDay(time) + Which is: u"3:42\x202FPM" + + .. and so on + +fileutiltest filetofile: + ../../base/files/file_util_unittest.cc:2692: Failure + Value of: stream + Actual: true + Expected: false + +stacktracetest: crashes (this doesn't seem to use execinfo so probably relies on glibc internal layout for tracing here) + +platformthreadtest canchangethreadtype: + ../../base/threading/platform_thread_unittest.cc:445: Failure + Expected equality of these values: + PlatformThread::CanChangeThreadType(ThreadType::kBackground, ThreadType::kResourceEfficient) + Which is: true + kCanIncreasePriority + Which is: false + +scopedfdownershiptrackingtest crashonunownedclose: fails due to scoped-file-no-close.patch + +stackcontainer customallocator: + ../../base/containers/stack_container_unittest.cc:211: Failure + Expected equality of these values: + 1 + Allocator::deallocated + Which is: 0 + +nativelibrarytest loadlibrarypreferownsymbols: crashes (probably musl dlopen does not play nice here) + +spantest empty: crashes (this looks fishy) + +readelfbuildid: crashes (this looks like glibc dynamic linker semantics) + +nss db unittest: various nss failures: e.g.: + ../../net/cert/nss_cert_database_unittest.cc:209: Failure + Expected equality of these values: + OK + Which is: 0 + cert_db_->ImportFromPKCS12(GetPublicSlot(), pkcs12_data, u"12345", true, nullptr) + Which is: -702 + +processutiltest cloneflags: fails in CI (ulimit? too many threads?) + ../../base/process/process_util_unittest.cc:1434: Failure + Value of: process.IsValid() + Actual: false + Expected: true + +addresstrackerlinuxnetlinktest: + ../../net/base/address_tracker_linux_unittest.cc:886: Failure + Value of: child.process.IsValid() + Actual: false + Expected: true + +ToAddressDoesNotDereference: ; Expected `get_for_extraction_cnt` to be 1 but got 0; + +DataCapturedManyThreads: flaky + +ProcessAlternativeServicesTest.Process*: crashed ? + --- a/base/strings/safe_sprintf_unittest.cc +++ b/base/strings/safe_sprintf_unittest.cc @@ -740,6 +740,7 @@ @@ -20,3 +100,262 @@ safesprintf emitnull: TEST(SafeSPrintfTest, PointerSize) { // The internal data representation is a 64bit value, independent of the +--- a/base/containers/flat_map_unittest.cc ++++ b/base/containers/flat_map_unittest.cc +@@ -52,6 +52,7 @@ + + } // namespace + ++#if 0 + TEST(FlatMap, IncompleteType) { + struct A { + using Map = flat_map; +@@ -65,6 +66,7 @@ + + A a; + } ++#endif + + TEST(FlatMap, RangeConstructor) { + flat_map::value_type input_vals[] = { +--- a/base/BUILD.gn ++++ b/base/BUILD.gn +@@ -3194,21 +3194,6 @@ + "hash/md5_constexpr_unittest.cc", + "hash/md5_unittest.cc", + "hash/sha1_unittest.cc", +- "i18n/break_iterator_unittest.cc", +- "i18n/case_conversion_unittest.cc", +- "i18n/char_iterator_unittest.cc", +- "i18n/character_encoding_unittest.cc", +- "i18n/file_util_icu_unittest.cc", +- "i18n/icu_string_conversions_unittest.cc", +- "i18n/icu_util_unittest.cc", +- "i18n/message_formatter_unittest.cc", +- "i18n/number_formatting_unittest.cc", +- "i18n/rtl_unittest.cc", +- "i18n/streaming_utf8_validator_unittest.cc", +- "i18n/string_search_unittest.cc", +- "i18n/time_formatting_unittest.cc", +- "i18n/timezone_unittest.cc", +- "i18n/transliterator_unittest.cc", + "immediate_crash_unittest.cc", + "json/json_parser_unittest.cc", + "json/json_reader_unittest.cc", +--- a/base/files/file_util_unittest.cc ++++ b/base/files/file_util_unittest.cc +@@ -2686,6 +2686,7 @@ + } + } + ++#if 0 + TEST_F(FileUtilTest, FileToFILE) { + File file; + FILE* stream = FileToFILE(std::move(file), "w"); +@@ -2700,6 +2701,7 @@ + EXPECT_FALSE(file.IsValid()); + EXPECT_TRUE(CloseFile(stream)); + } ++#endif + + TEST_F(FileUtilTest, FILEToFile) { + ScopedFILE stream; +--- a/base/debug/stack_trace_unittest.cc ++++ b/base/debug/stack_trace_unittest.cc +@@ -345,6 +345,7 @@ + // sometimes we read fp / pc from the place that previously held + // uninitialized value. + // TODO(crbug.com/1132511): Enable this test on Fuchsia. ++#if 0 + #if defined(MEMORY_SANITIZER) || BUILDFLAG(IS_FUCHSIA) + #define MAYBE_TraceStackFramePointersFromBuffer \ + DISABLED_TraceStackFramePointersFromBuffer +@@ -357,6 +358,7 @@ + const void* frames[kDepth]; + ExpectStackFramePointers(frames, kDepth, /*copy_stack=*/true); + } ++#endif + + #if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_APPLE) + #define MAYBE_StackEnd StackEnd +--- a/base/threading/platform_thread_unittest.cc ++++ b/base/threading/platform_thread_unittest.cc +@@ -416,6 +416,7 @@ + // platforms for all priorities. This not being the case. This test documents + // and hardcodes what we know. Please inform scheduler-dev@chromium.org if this + // proprerty changes for a given platform. ++#if 0 + TEST(PlatformThreadTest, CanChangeThreadType) { + #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) + // On Ubuntu, RLIMIT_NICE and RLIMIT_RTPRIO are 0 by default, so we won't be +@@ -472,6 +473,7 @@ + ThreadType::kBackground)); + #endif + } ++#endif + + TEST(PlatformThreadTest, SetCurrentThreadTypeTest) { + TestPriorityResultingFromThreadType(ThreadType::kBackground, +--- a/base/files/scoped_file_linux_unittest.cc ++++ b/base/files/scoped_file_linux_unittest.cc +@@ -42,11 +42,13 @@ + EXPECT_DEATH(ScopedFD(fd.get()), ""); + } + ++#if 0 + TEST_F(ScopedFDOwnershipTrackingTest, CrashOnUnownedClose) { + ScopedFD fd = OpenFD(); + subtle::EnableFDOwnershipEnforcement(true); + EXPECT_DEATH(close(fd.get()), ""); + } ++#endif + + #endif // defined(GTEST_HAS_DEATH_TEST) + +--- a/base/native_library_unittest.cc ++++ b/base/native_library_unittest.cc +@@ -139,6 +139,7 @@ + // Verifies that the |prefer_own_symbols| option satisfies its guarantee that + // a loaded library will always prefer local symbol resolution before + // considering global symbols. ++#if 0 + TEST(NativeLibraryTest, LoadLibraryPreferOwnSymbols) { + NativeLibraryOptions options; + options.prefer_own_symbols = true; +@@ -171,6 +172,7 @@ + EXPECT_EQ(2, NativeLibraryTestIncrement()); + EXPECT_EQ(3, NativeLibraryTestIncrement()); + } ++#endif + + #endif // !BUILDFLAG(IS_ANDROID) && !defined(THREAD_SANITIZER) && \ + // !defined(MEMORY_SANITIZER) +--- a/base/containers/span_unittest.cc ++++ b/base/containers/span_unittest.cc +@@ -995,6 +995,7 @@ + } + } + ++#if 0 + TEST(SpanTest, Empty) { + { + span span; +@@ -1014,6 +1015,7 @@ + EXPECT_TRUE(span_of_checked_iterators.empty()); + } + } ++#endif + + TEST(SpanTest, OperatorAt) { + static constexpr int kArray[] = {1, 6, 1, 8, 0}; +--- a/base/debug/elf_reader_unittest.cc ++++ b/base/debug/elf_reader_unittest.cc +@@ -194,6 +194,7 @@ + } + } + ++#if 0 + TEST(ElfReaderTestWithCurrentImage, ReadElfBuildId) { + #if BUILDFLAG(IS_ANDROID) + // On Android the library loader memory maps the full so file. +@@ -229,6 +230,7 @@ + UnloadNativeLibrary(library); + #endif + } ++#endif + + } // namespace debug + } // namespace base +--- a/net/BUILD.gn ++++ b/net/BUILD.gn +@@ -4826,7 +4826,6 @@ + sources += [ + "cert/internal/system_trust_store_nss_unittest.cc", + "cert/internal/trust_store_nss_unittest.cc", +- "cert/nss_cert_database_unittest.cc", + "cert/x509_util_nss_unittest.cc", + ] + if (!is_castos) { +--- a/base/process/process_util_unittest.cc ++++ b/base/process/process_util_unittest.cc +@@ -1419,7 +1419,7 @@ + return kSuccess; + } + +-#if defined(CLONE_NEWUSER) && defined(CLONE_NEWPID) ++#if 0 && defined(CLONE_NEWUSER) && defined(CLONE_NEWPID) + TEST_F(ProcessUtilTest, CloneFlags) { + if (!PathExists(FilePath("/proc/self/ns/user")) || + !PathExists(FilePath("/proc/self/ns/pid"))) { +--- a/net/base/address_tracker_linux_unittest.cc ++++ b/net/base/address_tracker_linux_unittest.cc +@@ -831,6 +831,7 @@ + // + // This test creates multiple concurrent `AddressTrackerLinux` instances in + // separate processes, each in their own PID namespaces. ++#if 0 + TEST(AddressTrackerLinuxNetlinkTest, TestInitializeTwoTrackersInPidNamespaces) { + // This test initializes `kNumChildren` instances of `AddressTrackerLinux` in + // tracking mode, each in their own child process running in a PID namespace. +@@ -901,6 +902,7 @@ + ASSERT_EQ(exit_code, 0); + } + } ++#endif + + MULTIPROCESS_TEST_MAIN(ChildProcessInitializeTrackerForTesting) { + base::test::TaskEnvironment task_env( +--- a/base/trace_event/trace_event_unittest.cc ++++ b/base/trace_event/trace_event_unittest.cc +@@ -1368,6 +1368,7 @@ + } + + // Test that data sent from multiple threads is gathered ++#if 0 + TEST_F(TraceEventTestFixture, DataCapturedManyThreads) { + BeginTrace(); + +@@ -1408,6 +1409,7 @@ + delete task_complete_events[i]; + } + } ++#endif + + // Test that thread and process names show up in the trace. + // In SDK build, thread names are not tracked inside //base. Instead, there's +--- a/base/allocator/partition_allocator/src/partition_alloc/pointers/raw_ptr_unittest.cc ++++ b/base/allocator/partition_allocator/src/partition_alloc/pointers/raw_ptr_unittest.cc +@@ -1481,6 +1481,7 @@ + // `base::to_address()` will use the dereference operator. This is not + // what we want; this test enforces extraction semantics for + // `to_address()`. ++#if 0 + TEST_F(RawPtrTest, ToAddressDoesNotDereference) { + CountingRawPtr ptr = nullptr; + int* raw = base::to_address(ptr); +@@ -1492,6 +1493,7 @@ + .get_for_duplication_cnt = 0}), + CountersMatch()); + } ++#endif + + TEST_F(RawPtrTest, ToAddressGivesBackRawAddress) { + int* raw = nullptr; +--- a/net/http/http_stream_factory_unittest.cc ++++ b/net/http/http_stream_factory_unittest.cc +@@ -3477,6 +3477,7 @@ + DefaultCTPolicyEnforcer ct_policy_enforcer_; + }; + ++#if 0 + TEST_F(ProcessAlternativeServicesTest, ProcessEmptyAltSvc) { + session_ = + std::make_unique(session_params_, session_context_); +@@ -3585,6 +3586,7 @@ + alternatives[0].host_port_pair()); + EXPECT_EQ(0u, alternatives[0].advertised_versions().size()); + } ++#endif + + } // namespace + diff --git a/backports/electron/electron_do-not-strip-binaries.patch b/backports/electron/electron_do-not-strip-binaries.patch deleted file mode 100644 index f90ce54..0000000 --- a/backports/electron/electron_do-not-strip-binaries.patch +++ /dev/null @@ -1,127 +0,0 @@ -diff --git a/electron/BUILD.gn.orig b/electron/BUILD.gn -index b08f434..4062428 100644 ---- a/electron/BUILD.gn.orig -+++ b/electron/BUILD.gn -@@ -44,7 +44,6 @@ if (is_mac) { - - if (is_linux) { - import("//build/config/linux/pkg_config.gni") -- import("//electron/build/linux/strip_binary.gni") - import("//tools/generate_stubs/rules.gni") - - pkg_config("gio_unix") { -@@ -1424,18 +1423,6 @@ dist_zip("electron_dist_zip") { - ":licenses", - ] - if (is_linux) { -- if (is_official_build) { -- data_deps += [ -- ":strip_chrome_crashpad_handler", -- ":strip_chrome_sandbox", -- ":strip_electron_binary", -- ":strip_libEGL_shlib", -- ":strip_libGLESv2_shlib", -- ":strip_libffmpeg_shlib", -- ":strip_libvk_swiftshader_shlib", -- ] -- } -- - data_deps += [ "//sandbox/linux:chrome_sandbox" ] - } - deps = data_deps -@@ -1481,16 +1468,6 @@ group("electron_mksnapshot") { - - dist_zip("electron_mksnapshot_zip") { - data_deps = mksnapshot_deps -- if (is_linux && is_official_build) { -- data_deps += [ -- ":strip_libEGL_shlib", -- ":strip_libGLESv2_shlib", -- ":strip_libffmpeg_shlib", -- ":strip_libvk_swiftshader_shlib", -- ":strip_mksnapshot_binary", -- ":strip_v8_context_snapshot_generator_binary", -- ] -- } - deps = data_deps - outputs = [ "$root_build_dir/mksnapshot.zip" ] - } -@@ -1637,78 +1614,3 @@ group("release_build") { - ] - } - } -- --if (is_linux && is_official_build) { -- strip_binary("strip_electron_binary") { -- binary_input = "$root_out_dir/$electron_project_name" -- symbol_output = "$root_out_dir/debug/$electron_project_name.debug" -- compress_debug_sections = true -- deps = [ ":electron_app" ] -- } -- -- strip_binary("strip_chrome_crashpad_handler") { -- binary_input = "$root_out_dir/chrome_crashpad_handler" -- symbol_output = "$root_out_dir/debug/chrome_crashpad_handler.debug" -- compress_debug_sections = true -- deps = [ "//components/crash/core/app:chrome_crashpad_handler" ] -- } -- -- strip_binary("strip_chrome_sandbox") { -- binary_input = "$root_out_dir/chrome_sandbox" -- symbol_output = "$root_out_dir/debug/chrome-sandbox.debug" -- compress_debug_sections = true -- deps = [ "//sandbox/linux:chrome_sandbox" ] -- } -- -- strip_binary("strip_libEGL_shlib") { -- binary_input = "$root_out_dir/libEGL.so" -- symbol_output = "$root_out_dir/debug/libEGL.so.debug" -- compress_debug_sections = true -- deps = [ "//third_party/angle:libEGL" ] -- } -- -- strip_binary("strip_libGLESv2_shlib") { -- binary_input = "$root_out_dir/libGLESv2.so" -- symbol_output = "$root_out_dir/debug/libGLESv2.so.debug" -- compress_debug_sections = true -- deps = [ "//third_party/angle:libGLESv2" ] -- } -- -- strip_binary("strip_libffmpeg_shlib") { -- binary_input = "$root_out_dir/libffmpeg.so" -- symbol_output = "$root_out_dir/debug/libffmpeg.so.debug" -- compress_debug_sections = true -- deps = [ "//third_party/ffmpeg" ] -- } -- -- strip_binary("strip_libvk_swiftshader_shlib") { -- binary_input = "$root_out_dir/libvk_swiftshader.so" -- symbol_output = "$root_out_dir/debug/libvk_swiftshader.so.debug" -- compress_debug_sections = true -- deps = [ "//third_party/swiftshader/src/Vulkan:swiftshader_libvulkan" ] -- } -- -- strip_binary("strip_mksnapshot_binary") { -- _binary_path = rebase_path( -- get_label_info( -- ":v8_context_snapshot_generator($v8_snapshot_toolchain)", -- "root_out_dir") + "/mksnapshot", -- root_build_dir) -- binary_input = "$root_out_dir/$_binary_path" -- symbol_output = "$root_out_dir/debug/${_binary_path}.debug" -- compress_debug_sections = true -- deps = mksnapshot_deps -- } -- -- strip_binary("strip_v8_context_snapshot_generator_binary") { -- _binary_path = rebase_path( -- get_label_info( -- ":v8_context_snapshot_generator($v8_snapshot_toolchain)", -- "root_out_dir") + "/v8_context_snapshot_generator", -- root_build_dir) -- binary_input = "$root_out_dir/$_binary_path" -- symbol_output = "$root_out_dir/debug/${_binary_path}.debug" -- compress_debug_sections = true -- deps = mksnapshot_deps -- } --} diff --git a/backports/electron/electron_shell-file-dialog-drop-glibc.patch b/backports/electron/electron_shell-file-dialog-drop-glibc.patch deleted file mode 100644 index b2a6927..0000000 --- a/backports/electron/electron_shell-file-dialog-drop-glibc.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/./electron/shell/browser/ui/file_dialog.h.orig b/./electron/shell/browser/ui/file_dialog.h -index 6cdfc7b..f7757da 100644 ---- a/./electron/shell/browser/ui/file_dialog.h.orig -+++ b/./electron/shell/browser/ui/file_dialog.h -@@ -13,10 +13,6 @@ - #include "base/files/file_path.h" - #include "base/memory/raw_ptr_exclusion.h" - --#if BUILDFLAG(IS_LINUX) --#include --#endif -- - namespace electron { - class NativeWindow; - } - diff --git a/backports/electron/electron_system-zlib-headers.patch b/backports/electron/electron_system-zlib-headers.patch deleted file mode 100644 index 644f5e7..0000000 --- a/backports/electron/electron_system-zlib-headers.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/electron/BUILD.gn.orig b/electron/BUILD.gn -index 235c7abd3e8..088c24ac45e 100644 ---- a/electron/BUILD.gn.orig -+++ b/electron/BUILD.gn -@@ -1569,7 +1569,6 @@ group("copy_node_headers") { - ":generate_node_headers", - ":node_gypi_headers", - ":node_version_header", -- ":zlib_headers", - ] - } - diff --git a/backports/electron/electron_unbundle-node.patch b/backports/electron/electron_unbundle-node.patch deleted file mode 100644 index d518d7e..0000000 --- a/backports/electron/electron_unbundle-node.patch +++ /dev/null @@ -1,143 +0,0 @@ -diff --git a/electron/script/generate-config-gypi.py.orig b/electron/script/generate-config-gypi.py -index 58c973b..c215d90 100755 ---- a/electron/script/generate-config-gypi.py.orig -+++ b/electron/script/generate-config-gypi.py -@@ -64,6 +64,11 @@ def main(target_file, target_cpu): - # in common.gypi - if 'clang' in v: - del v['clang'] -+ -+ with open(os.path.join(NODE_DIR, 'use_system.txt')) as f: -+ for dep in f.read().strip().split(' '): -+ if v.get(f'node_shared_{dep}') is not None: -+ v[f'node_shared_{dep}'] = 'true' - - with open(target_file, 'w+', encoding='utf-8') as file_out: - file_out.write(pprint.pformat(config, indent=2)) - -diff --git a/third_party/electron_node/node.gni.orig b/third_party/electron_node/node.gni -index 73bf383..1c80d5a 100644 ---- a/third_party/electron_node/node.gni.orig -+++ b/third_party/electron_node/node.gni -@@ -73,6 +73,7 @@ declare_args() { - node_use_amaro = true - - # Allows downstream packagers (eg. Linux distributions) to build against system shared libraries. -+ use_system_ada = false - use_system_cares = false - use_system_nghttp2 = false - use_system_llhttp = false -diff --git a/third_party/electron_node/unofficial.gni.orig b/third_party/electron_node/unofficial.gni -index d61a9bd..8bf990e 100644 ---- a/third_party/electron_node/unofficial.gni.orig -+++ b/third_party/electron_node/unofficial.gni -@@ -143,7 +143,6 @@ template("node_gn_build") { - "deps/googletest:googletest_config", - ] - public_deps = [ -- "deps/ada", - "deps/uv", - "//electron:electron_js2c", - "deps/simdjson", -@@ -151,10 +150,7 @@ template("node_gn_build") { - ] - deps = [ - ":run_node_js2c", -- "deps/cares", -- "deps/histogram", - "deps/nbytes", -- "deps/nghttp2", - "deps/postject", - "deps/sqlite", - "deps/uvwasi", -@@ -182,12 +178,30 @@ template("node_gn_build") { - if (is_posix) { - configs -= [ "//build/config/gcc:symbol_visibility_hidden" ] - configs += [ "//build/config/gcc:symbol_visibility_default" ] -+ libs = [] -+ include_dirs = [] - } - if (use_system_llhttp) { - libs += [ "llhttp" ] - } else { - deps += [ "deps/llhttp" ] - } -+ if (use_system_cares) { -+ libs += [ "cares" ] -+ } else { -+ deps += [ "deps/cares" ] -+ } -+ if (use_system_nghttp2) { -+ libs += [ "nghttp2" ] -+ } else { -+ deps += [ "deps/nghttp2" ] -+ } -+ if (use_system_ada) { -+ libs += [ "ada" ] -+ include_dirs += [ "/usr/include/ada" ] -+ } else { -+ public_deps += [ "deps/ada" ] -+ } - if (use_system_histogram) { - libs += [ "hdr_histogram" ] - include_dirs += [ "/usr/include/hdr" ] -@@ -208,7 +222,7 @@ template("node_gn_build") { - "src/inspector:node_protocol_generated_sources", - "src/inspector:v8_inspector_compress_protocol_json", - ] -- include_dirs = [ -+ include_dirs += [ - "$target_gen_dir/src", - "$target_gen_dir/src/inspector", - "$node_inspector_protocol_path", -@@ -222,17 +236,18 @@ template("node_gn_build") { - sources += node_inspector.node_inspector_sources + - node_inspector.node_inspector_generated_sources - } -- if (is_linux) { -- import("//build/config/linux/pkg_config.gni") -- if (use_system_cares) { -- pkg_config("cares") { -- packages = [ "libcares" ] -- } -- } -- if (use_system_nghttp2) { -- pkg_config("nghttp2") { -- packages = [ "libnghttp2" ] -- } -+ } -+ -+ if (is_linux) { -+ import("//build/config/linux/pkg_config.gni") -+ if (use_system_cares) { -+ pkg_config("cares") { -+ packages = [ "libcares" ] -+ } -+ } -+ if (use_system_nghttp2) { -+ pkg_config("nghttp2") { -+ packages = [ "libnghttp2" ] - } - } - } -diff --git a/third_party/electron_node/unofficial.gni.orig b/third_party/electron_node/unofficial.gni -index 6bcc40b..7e383b2 100644 ---- a/third_party/electron_node/unofficial.gni.orig -+++ b/third_party/electron_node/unofficial.gni -@@ -142,7 +142,6 @@ template("node_gn_build") { - public_configs = [ - ":node_external_config", - "deps/googletest:googletest_config", -- ":zstd_include_config" - ] - public_deps = [ - "deps/ada", -@@ -163,8 +162,6 @@ template("node_gn_build") { - "//third_party/zlib", - "//third_party/brotli:dec", - "//third_party/brotli:enc", -- "//third_party/zstd:decompress", -- "//third_party/zstd:headers", - "$node_simdutf_path", - "$node_v8_path:v8_libplatform", - ] diff --git a/backports/electron/electron_use-system-yarn.patch b/backports/electron/electron_use-system-yarn.patch deleted file mode 100644 index eaa8a8c..0000000 --- a/backports/electron/electron_use-system-yarn.patch +++ /dev/null @@ -1,17 +0,0 @@ -diff --git a/electron/.yarnrc.yml.orig b/electron/.yarnrc.yml -index ca0a580..a388ff9 100644 ---- a/electron/.yarnrc.yml.orig -+++ b/electron/.yarnrc.yml -@@ -1,12 +1,3 @@ - enableScripts: false - --nmHoistingLimits: workspaces -- - nodeLinker: node-modules -- --npmMinimalAgeGate: 10080 -- --npmPreapprovedPackages: -- - "@electron/*" -- --yarnPath: .yarn/releases/yarn-4.12.0.cjs diff --git a/backports/electron/fc-cache-version.patch b/backports/electron/fc-cache-version.patch index 7cbd2a8..3b76897 100644 --- a/backports/electron/fc-cache-version.patch +++ b/backports/electron/fc-cache-version.patch @@ -1,10 +1,12 @@ ---- ./third_party/test_fonts/fontconfig/generate_fontconfig_caches.cc.orig -+++ ./third_party/test_fonts/fontconfig/generate_fontconfig_caches.cc +instead of hardcoding the version, use the defined macro. +-- +--- a/third_party/test_fonts/fontconfig/generate_fontconfig_caches.cc ++++ b/third_party/test_fonts/fontconfig/generate_fontconfig_caches.cc @@ -56,7 +56,7 @@ FcFini(); // Check existence of intended fontconfig cache file. -- auto cache = fontconfig_caches + "/" + kCacheKey + "-le64.cache-11"; +- auto cache = fontconfig_caches + "/" + kCacheKey + "-le64.cache-9"; + auto cache = fontconfig_caches + "/" + kCacheKey + "-le64.cache-" + FC_CACHE_VERSION; bool cache_exists = access(cache.c_str(), F_OK) == 0; return !cache_exists; diff --git a/backports/electron/fix-ffmpeg-codec-list.patch b/backports/electron/fix-ffmpeg-codec-list.patch deleted file mode 100644 index de24f66..0000000 --- a/backports/electron/fix-ffmpeg-codec-list.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- a/media/ffmpeg/ffmpeg_common.cc -+++ b/media/ffmpeg/ffmpeg_common.cc -@@ -1046,8 +1046,8 @@ - - // This should match the configured lists in //third_party/ffmpeg. - static constexpr std::string_view kAllowedAudioCodecs = -- "vorbis,libopus,flac,pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le," -- "mp3,pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw" EXTRA_CODECS; -+ "vorbis,opus,libopus,flac,pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le," -+ "mp3float,mp3,pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw" EXTRA_CODECS; - #undef EXTRA_CODECS - - return kAllowedAudioCodecs.data(); diff --git a/backports/electron/fix-missing-cstdint-include-musl.patch b/backports/electron/fix-missing-cstdint-include-musl.patch new file mode 100644 index 0000000..00f16af --- /dev/null +++ b/backports/electron/fix-missing-cstdint-include-musl.patch @@ -0,0 +1,13 @@ +Patch-Source: https://github.com/void-linux/void-packages/blob/378db3cf5087877588aebaaa8ca3c9d94dfb54e0/srcpkgs/chromium/patches/fix-missing-cstdint-include-musl.patch +fixed in https://github.com/google/quiche/commit/4d4820f0a959be7fa22285d114a5b5b8676f10fe +-- +--- a/net/third_party/quiche/src/quiche/http2/adapter/window_manager.h ++++ b/net/third_party/quiche/src/quiche/http2/adapter/window_manager.h +@@ -3,6 +3,7 @@ + + #include + ++#include + #include + + #include "common/platform/api/quiche_export.h" diff --git a/backports/electron/fix-opus.patch b/backports/electron/fix-opus.patch new file mode 100644 index 0000000..8841a32 --- /dev/null +++ b/backports/electron/fix-opus.patch @@ -0,0 +1,12 @@ +--- a/media/filters/ffmpeg_glue.cc ++++ b/media/filters/ffmpeg_glue.cc +@@ -142,7 +142,7 @@ const char* FFmpegGlue::GetAllowedAudioDecoders() { + static const base::NoDestructor kAllowedAudioCodecs([]() { + // This should match the configured lists in //third_party/ffmpeg. + std::string allowed_decoders( +- "vorbis,libopus,flac,pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le," ++ "vorbis,opus,libopus,flac,pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le," + "mp3,pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw"); + #if BUILDFLAG(USE_PROPRIETARY_CODECS) + allowed_decoders += ",aac"; + diff --git a/backports/electron/headless-shell-no-license.patch b/backports/electron/headless-shell-no-license.patch deleted file mode 100644 index 6a6027d..0000000 --- a/backports/electron/headless-shell-no-license.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 6f4685cff1ab8c68de98c0731bb8afaf8a05a723 Mon Sep 17 00:00:00 2001 -From: knuxify -Date: Sat, 5 Apr 2025 14:10:37 +0200 -Subject: [PATCH] Do not generate license file for headless-shell build - ---- - headless/BUILD.gn | 4 ---- - 1 file changed, 4 deletions(-) - -diff --git a/headless/BUILD.gn b/headless/BUILD.gn -index 798bb22..9d83f49 100644 ---- a/headless/BUILD.gn -+++ b/headless/BUILD.gn -@@ -934,10 +934,6 @@ executable("headless_shell") { - - deps = [ ":headless_shell_lib" ] - -- if (proprietary_codecs) { -- deps += [ ":generate_headless_shell_license_file" ] -- } -- - if (!headless_use_embedded_resources) { - data = [ - "$root_out_dir/headless_lib_data.pak", --- -2.49.0 - diff --git a/backports/electron/electron_icon.patch b/backports/electron/icon.patch similarity index 100% rename from backports/electron/electron_icon.patch rename to backports/electron/icon.patch diff --git a/backports/electron/import-version.patch b/backports/electron/import-version.patch new file mode 100644 index 0000000..d275038 --- /dev/null +++ b/backports/electron/import-version.patch @@ -0,0 +1,15 @@ +they fixed the import to be glibc conditional, but now nothing is imported so +all the string functions are missing. +-- +--- a/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc ++++ b/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc +@@ -61,8 +61,7 @@ + + // TODO(crbug.com/1052397): Revisit the macro expression once build flag switch + // of lacros-chrome is complete. +-#if defined(__GLIBC__) && (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS)) +-#include ++#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS) + + #include "base/linux_util.h" + #include "base/strings/string_split.h" diff --git a/backports/electron/libstdc++13.patch b/backports/electron/libstdc++13.patch new file mode 100644 index 0000000..c49f7e8 --- /dev/null +++ b/backports/electron/libstdc++13.patch @@ -0,0 +1,269 @@ +missing libstdc++13 includes +-- +--- a/third_party/openscreen/src/platform/base/error.h ++++ b/third_party/openscreen/src/platform/base/error.h +@@ -6,6 +6,7 @@ + #define PLATFORM_BASE_ERROR_H_ + + #include ++#include + #include + #include + #include +--- a/ui/base/prediction/kalman_filter.h ++++ b/ui/base/prediction/kalman_filter.h +@@ -8,6 +8,8 @@ + #include "base/component_export.h" + #include "ui/gfx/geometry/matrix3_f.h" + ++#include ++ + namespace ui { + + // This Kalman filter is used to predict state in one axles. +--- a/ui/events/types/scroll_types.h ++++ b/ui/events/types/scroll_types.h +@@ -5,6 +5,8 @@ + #ifndef UI_EVENTS_TYPES_SCROLL_TYPES_H_ + #define UI_EVENTS_TYPES_SCROLL_TYPES_H_ + ++#include ++ + namespace ui { + + enum class ScrollGranularity : uint8_t { +--- a/third_party/webrtc/rtc_base/system/file_wrapper.h ++++ b/third_party/webrtc/rtc_base/system/file_wrapper.h +@@ -14,6 +14,7 @@ + #include + #include + ++#include + #include + + #include "absl/strings/string_view.h" +--- a/third_party/pdfium/constants/annotation_flags.h ++++ b/third_party/pdfium/constants/annotation_flags.h +@@ -5,6 +5,8 @@ + #ifndef CONSTANTS_ANNOTATION_FLAGS_H_ + #define CONSTANTS_ANNOTATION_FLAGS_H_ + ++#include ++ + namespace pdfium { + namespace annotation_flags { + +--- a/third_party/s2cellid/src/s2/util/math/mathutil.h ++++ b/third_party/s2cellid/src/s2/util/math/mathutil.h +@@ -21,6 +21,7 @@ + #ifndef S2_UTIL_MATH_MATHUTIL_H_ + #define S2_UTIL_MATH_MATHUTIL_H_ + ++#include + #include + + class MathUtil { +--- a/third_party/s2cellid/src/s2/s1angle.h ++++ b/third_party/s2cellid/src/s2/s1angle.h +@@ -24,6 +24,7 @@ + #define S2_S1ANGLE_H_ + + #include ++#include + #include + #include + #include +--- a/third_party/maldoca/src/maldoca/ole/header.h ++++ b/third_party/maldoca/src/maldoca/ole/header.h +@@ -45,6 +45,8 @@ + + #include "absl/strings/string_view.h" + ++#include ++ + namespace maldoca { + + class OLEHeader { +--- a/components/password_manager/core/browser/generation/password_generator.h ++++ b/components/password_manager/core/browser/generation/password_generator.h +@@ -5,6 +5,7 @@ + #ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_GENERATION_PASSWORD_GENERATOR_H_ + #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_GENERATION_PASSWORD_GENERATOR_H_ + ++#include + #include + + +--- a/base/debug/profiler.h ++++ b/base/debug/profiler.h +@@ -7,6 +7,7 @@ + + #include + ++#include + #include + + #include "base/base_export.h" +--- a/components/dom_distiller/core/url_utils.h ++++ b/components/dom_distiller/core/url_utils.h +@@ -5,6 +5,7 @@ + #ifndef COMPONENTS_DOM_DISTILLER_CORE_URL_UTILS_H_ + #define COMPONENTS_DOM_DISTILLER_CORE_URL_UTILS_H_ + ++#include + #include + + #include "base/strings/string_piece_forward.h" +--- a/components/feature_engagement/internal/event_storage_validator.h ++++ b/components/feature_engagement/internal/event_storage_validator.h +@@ -5,6 +5,7 @@ + #ifndef COMPONENTS_FEATURE_ENGAGEMENT_INTERNAL_EVENT_STORAGE_VALIDATOR_H_ + #define COMPONENTS_FEATURE_ENGAGEMENT_INTERNAL_EVENT_STORAGE_VALIDATOR_H_ + ++#include + #include + + namespace feature_engagement { +--- a/chrome/test/chromedriver/chrome/web_view_impl.cc ++++ b/chrome/test/chromedriver/chrome/web_view_impl.cc +@@ -8,6 +8,7 @@ + #include + #include + #include ++#include + #include + #include + +--- a/cc/trees/target_property.cc ++++ b/cc/trees/target_property.cc +@@ -2,6 +2,8 @@ + // Use of this source code is governed by a BSD-style license that can be + // found in the LICENSE file. + ++#include ++ + #include "cc/trees/target_property.h" + + #include "ui/gfx/animation/keyframe/target_property.h" +--- a/gpu/config/gpu_feature_info.h ++++ b/gpu/config/gpu_feature_info.h +@@ -5,6 +5,7 @@ + #ifndef GPU_CONFIG_GPU_FEATURE_INFO_H_ + #define GPU_CONFIG_GPU_FEATURE_INFO_H_ + ++#include + #include + #include + +--- a/gpu/config/gpu_driver_bug_workarounds.h ++++ b/gpu/config/gpu_driver_bug_workarounds.h +@@ -5,6 +5,7 @@ + #ifndef GPU_CONFIG_GPU_DRIVER_BUG_WORKAROUNDS_H_ + #define GPU_CONFIG_GPU_DRIVER_BUG_WORKAROUNDS_H_ + ++#include + #include + + #include "build/build_config.h" +--- a/third_party/blink/public/common/page_state/page_state.h ++++ b/third_party/blink/public/common/page_state/page_state.h +@@ -5,6 +5,7 @@ + #ifndef THIRD_PARTY_BLINK_PUBLIC_COMMON_PAGE_STATE_PAGE_STATE_H_ + #define THIRD_PARTY_BLINK_PUBLIC_COMMON_PAGE_STATE_PAGE_STATE_H_ + ++#include + #include + #include + +--- a/pdf/document_attachment_info.h ++++ b/pdf/document_attachment_info.h +@@ -5,6 +5,7 @@ + #ifndef PDF_DOCUMENT_ATTACHMENT_INFO_H_ + #define PDF_DOCUMENT_ATTACHMENT_INFO_H_ + ++#include + #include + + +--- a/components/payments/content/utility/fingerprint_parser.h ++++ b/components/payments/content/utility/fingerprint_parser.h +@@ -7,6 +7,7 @@ + + #include + ++#include + #include + #include + +--- a/media/base/video_transformation.h ++++ b/media/base/video_transformation.h +@@ -5,6 +5,7 @@ + #ifndef MEDIA_BASE_VIDEO_TRANSFORMATION_H_ + #define MEDIA_BASE_VIDEO_TRANSFORMATION_H_ + ++#include + #include + + #include "base/numerics/math_constants.h" +--- a/components/omnibox/browser/on_device_head_model.h ++++ b/components/omnibox/browser/on_device_head_model.h +@@ -5,6 +5,7 @@ + #ifndef COMPONENTS_OMNIBOX_BROWSER_ON_DEVICE_HEAD_MODEL_H_ + #define COMPONENTS_OMNIBOX_BROWSER_ON_DEVICE_HEAD_MODEL_H_ + ++#include + #include + #include + #include +--- a/components/autofill/core/browser/autofill_ablation_study.h ++++ b/components/autofill/core/browser/autofill_ablation_study.h +@@ -5,6 +5,7 @@ + #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_ABLATION_STUDY_H_ + #define COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_ABLATION_STUDY_H_ + ++#include + #include + + class GURL; +--- a/components/autofill/core/browser/strike_databases/strike_database_base.h ++++ b/components/autofill/core/browser/strike_databases/strike_database_base.h +@@ -5,6 +5,7 @@ + #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_STRIKE_DATABASES_STRIKE_DATABASE_BASE_H_ + #define COMPONENTS_AUTOFILL_CORE_BROWSER_STRIKE_DATABASES_STRIKE_DATABASE_BASE_H_ + ++#include + #include + #include + #include +--- a/chrome/browser/resource_coordinator/decision_details.h ++++ b/chrome/browser/resource_coordinator/decision_details.h +@@ -5,6 +5,7 @@ + #ifndef CHROME_BROWSER_RESOURCE_COORDINATOR_DECISION_DETAILS_H_ + #define CHROME_BROWSER_RESOURCE_COORDINATOR_DECISION_DETAILS_H_ + ++#include + #include + #include + +--- a/net/third_party/quiche/src/quiche/quic/core/qpack/qpack_stream_sender_delegate.h ++++ b/net/third_party/quiche/src/quiche/quic/core/qpack/qpack_stream_sender_delegate.h +@@ -8,6 +8,8 @@ + #include "absl/strings/string_view.h" + #include "quiche/quic/platform/api/quic_export.h" + ++#include ++ + namespace quic { + + // This interface writes encoder/decoder data to peer. +--- a/third_party/perfetto/include/perfetto/base/export.h ++++ b/third_party/perfetto/include/perfetto/base/export.h +@@ -17,6 +17,8 @@ + #ifndef INCLUDE_PERFETTO_BASE_EXPORT_H_ + #define INCLUDE_PERFETTO_BASE_EXPORT_H_ + ++#include ++ + #include "perfetto/base/build_config.h" + #include "perfetto/public/abi/export.h" + diff --git a/backports/electron/mman.patch b/backports/electron/mman.patch new file mode 100644 index 0000000..d15605a --- /dev/null +++ b/backports/electron/mman.patch @@ -0,0 +1,13 @@ +needed for PKEY_DISABLE_WRITE. these are documented as also being from sys/ +mman.h with GNU_SOURCE, but musl doesn't do that, so these are strictly from +kernel headers +--- a/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_unittest.cc ++++ b/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_unittest.cc +@@ -60,6 +60,7 @@ + #include + #include + #include ++#include + #endif // BUILDFLAG(IS_POSIX) + + #if BUILDFLAG(ENABLE_PARTITION_ALLOC_AS_MALLOC_SUPPORT) && BUILDFLAG(IS_MAC) diff --git a/backports/electron/musl-auxv.patch b/backports/electron/musl-auxv.patch new file mode 100644 index 0000000..ce348cc --- /dev/null +++ b/backports/electron/musl-auxv.patch @@ -0,0 +1,11 @@ +--- ./v8/src/base/cpu.cc.orig ++++ ./v8/src/base/cpu.cc +@@ -14,7 +14,7 @@ + #if V8_OS_LINUX + #include // AT_HWCAP + #endif +-#if V8_GLIBC_PREREQ(2, 16) || V8_OS_ANDROID ++#if 1 + #include // getauxval() + #endif + #if V8_OS_QNX diff --git a/backports/electron/musl-sandbox.patch b/backports/electron/musl-sandbox.patch index ccd9423..52c3b21 100644 --- a/backports/electron/musl-sandbox.patch +++ b/backports/electron/musl-sandbox.patch @@ -45,7 +45,7 @@ diff --git a/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc ./sandbox/linux/s index d9d1882..0567557 100644 --- a/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc +++ ./sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc -@@ -438,6 +438,7 @@ +@@ -392,6 +392,7 @@ bool SyscallSets::IsAllowedProcessStartOrDeath(int sysno) { #if defined(__i386__) case __NR_waitpid: #endif @@ -53,7 +53,7 @@ index d9d1882..0567557 100644 return true; case __NR_clone: // Should be parameter-restricted. case __NR_setns: // Privileged. -@@ -450,7 +451,6 @@ +@@ -404,7 +405,6 @@ bool SyscallSets::IsAllowedProcessStartOrDeath(int sysno) { #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) case __NR_set_thread_area: #endif @@ -61,16 +61,16 @@ index d9d1882..0567557 100644 case __NR_unshare: #if !defined(__mips__) && !defined(__aarch64__) case __NR_vfork: -@@ -549,6 +549,8 @@ +@@ -514,6 +514,8 @@ bool SyscallSets::IsAllowedAddressSpaceAccess(int sysno) { + case __NR_mlock: case __NR_munlock: case __NR_munmap: - case __NR_mseal: + case __NR_mremap: + case __NR_membarrier: return true; case __NR_madvise: case __NR_mincore: -@@ -566,7 +568,6 @@ +@@ -531,7 +533,6 @@ bool SyscallSets::IsAllowedAddressSpaceAccess(int sysno) { case __NR_modify_ldt: #endif case __NR_mprotect: diff --git a/backports/electron/musl-v8-monotonic-pthread-cont_timedwait.patch b/backports/electron/musl-v8-monotonic-pthread-cont_timedwait.patch new file mode 100644 index 0000000..3a99ee5 --- /dev/null +++ b/backports/electron/musl-v8-monotonic-pthread-cont_timedwait.patch @@ -0,0 +1,23 @@ +use monotonic clock for pthread_cond_timedwait with musl too, since it supports +it +-- +--- a/v8/src/base/platform/condition-variable.cc ++++ b/v8/src/base/platform/condition-variable.cc +@@ -16,7 +16,7 @@ + + ConditionVariable::ConditionVariable() { + #if (V8_OS_FREEBSD || V8_OS_NETBSD || V8_OS_OPENBSD || \ +- (V8_OS_LINUX && V8_LIBC_GLIBC)) ++ V8_OS_LINUX) + // On Free/Net/OpenBSD and Linux with glibc we can change the time + // source for pthread_cond_timedwait() to use the monotonic clock. + pthread_condattr_t attr; +@@ -92,7 +92,7 @@ + &native_handle_, &mutex->native_handle(), &ts); + #else + #if (V8_OS_FREEBSD || V8_OS_NETBSD || V8_OS_OPENBSD || \ +- (V8_OS_LINUX && V8_LIBC_GLIBC)) ++ V8_OS_LINUX) + // On Free/Net/OpenBSD and Linux with glibc we can change the time + // source for pthread_cond_timedwait() to use the monotonic clock. + result = clock_gettime(CLOCK_MONOTONIC, &ts); diff --git a/backports/electron/net-test-no-vpython.patch b/backports/electron/net-test-no-vpython.patch deleted file mode 100644 index efb2920..0000000 --- a/backports/electron/net-test-no-vpython.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 4b41417068045f11db9e7edead1447e93adb9073 Mon Sep 17 00:00:00 2001 -From: LN Liberda -Date: Sat, 28 Jun 2025 18:13:59 +0200 -Subject: [PATCH] Test net without vendored python - ---- - net/test/python_utils.cc | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/net/test/python_utils.cc b/net/test/python_utils.cc -index 2cdc07dad9948..0b2d42a5bf126 100644 ---- a/net/test/python_utils.cc -+++ b/net/test/python_utils.cc -@@ -47,7 +47,7 @@ bool GetPython3Command(base::CommandLine* python_cmd) { - #if BUILDFLAG(IS_WIN) - python_cmd->SetProgram(base::FilePath(FILE_PATH_LITERAL("vpython3.bat"))); - #else -- python_cmd->SetProgram(base::FilePath(FILE_PATH_LITERAL("vpython3"))); -+ python_cmd->SetProgram(base::FilePath(FILE_PATH_LITERAL("python3"))); - #endif - - #if BUILDFLAG(IS_MAC) diff --git a/backports/electron/net-test-pyws3-py3.12.patch b/backports/electron/net-test-pyws3-py3.12.patch deleted file mode 100644 index cee3e61..0000000 --- a/backports/electron/net-test-pyws3-py3.12.patch +++ /dev/null @@ -1,39 +0,0 @@ -ssl.wrap_socket() was removed in Python 3.12, needed for net_unittests. -Patch-Source: https://github.com/GoogleChromeLabs/pywebsocket3/pull/39 -Modified (changed path) -lnl - -From bc50ae9d451ca705edd6101d987b839e1a09d45e Mon Sep 17 00:00:00 2001 -From: Sven Diederichs <22592421+zaurask@users.noreply.github.com> -Date: Thu, 28 Mar 2024 18:55:28 +0100 -Subject: [PATCH] use ssl.SSLContext.wrap_socket rather than the deprecated - ssl.wrap_socket - ---- - pywebsocket3/websocket_server.py | 14 ++++++++------ - 1 file changed, 8 insertions(+), 6 deletions(-) - -diff --git a/third_party/pywebsocket3/src/mod_pywebsocket/websocket_server.py b/third_party/pywebsocket3/src/mod_pywebsocket/websocket_server.py -index e7485ec..93ad6f1 100644 ---- a/third_party/pywebsocket3/src/mod_pywebsocket/websocket_server.py -+++ b/third_party/pywebsocket3/src/mod_pywebsocket/websocket_server.py -@@ -157,12 +157,14 @@ class WebSocketServer(socketserver.ThreadingMixIn, BaseHTTPServer.HTTPServer): - client_cert_ = ssl.CERT_REQUIRED - else: - client_cert_ = ssl.CERT_NONE -- socket_ = ssl.wrap_socket( -- socket_, -- keyfile=server_options.private_key, -- certfile=server_options.certificate, -- ca_certs=server_options.tls_client_ca, -- cert_reqs=client_cert_) -+ -+ ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS) -+ if server_options.certificate: -+ ssl_context.load_cert_chain(certfile=server_options.certificate, keyfile=server_options.private_key) -+ if server_options.tls_client_ca: -+ ssl_context.load_verify_locations(server_options.tls_client_ca) -+ ssl_context.verify_mode =client_cert_ -+ socket_ = ssl_context.wrap_socket(socket_) - self._sockets.append((socket_, addrinfo)) - - def server_bind(self): diff --git a/backports/electron/no-execinfo.patch b/backports/electron/no-execinfo.patch index 12064ba..b1705f5 100644 --- a/backports/electron/no-execinfo.patch +++ b/backports/electron/no-execinfo.patch @@ -37,16 +37,16 @@ for discussion about this, see https://www.openwall.com/lists/musl/2021/07/16/1 #define HAVE_FCNTL_H 1 --- a/base/debug/stack_trace.cc +++ b/base/debug/stack_trace.cc -@@ -311,7 +311,7 @@ - - std::string StackTrace::ToStringWithPrefix(cstring_view prefix_string) const { +@@ -291,7 +291,7 @@ + } + std::string StackTrace::ToStringWithPrefix(const char* prefix_string) const { std::stringstream stream; -#if !defined(__UCLIBC__) && !defined(_AIX) +#if defined(__GLIBC__) && !defined(_AIX) - OutputToStreamWithPrefix(&stream, prefix_string); - #endif - return stream.str(); -@@ -335,7 +335,7 @@ + if (ShouldSuppressOutput()) { + return "Backtrace suppressed."; + } +@@ -301,7 +301,7 @@ } std::ostream& operator<<(std::ostream& os, const StackTrace& s) { diff --git a/backports/electron/no-mallinfo.patch b/backports/electron/no-mallinfo.patch index 1f2d541..37abb3f 100644 --- a/backports/electron/no-mallinfo.patch +++ b/backports/electron/no-mallinfo.patch @@ -102,23 +102,23 @@ musl does not implement mallinfo()/mallinfo2() #define HAVE_MALLOC_H 1 --- a/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc.cc +++ b/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc.cc -@@ -660,7 +660,7 @@ +@@ -717,7 +717,7 @@ - #endif // !PA_BUILDFLAG(IS_APPLE) && !PA_BUILDFLAG(IS_ANDROID) + #endif // !BUILDFLAG(IS_APPLE) && !BUILDFLAG(IS_ANDROID) --#if PA_BUILDFLAG(IS_LINUX) || PA_BUILDFLAG(IS_CHROMEOS) +-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) +#if 0 SHIM_ALWAYS_EXPORT struct mallinfo mallinfo(void) __THROW { - partition_alloc::SimplePartitionStatsDumper allocator_dumper; + base::SimplePartitionStatsDumper allocator_dumper; Allocator()->DumpStats("malloc", true, &allocator_dumper); --- a/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc +++ b/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc -@@ -29,7 +29,7 @@ - #if PA_BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) +@@ -24,7 +24,7 @@ + #if BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) // Platforms on which we override weak libc symbols. --#if PA_BUILDFLAG(IS_LINUX) || PA_BUILDFLAG(IS_CHROMEOS) -+#if (PA_BUILDFLAG(IS_LINUX) && defined(__GLIBC__)) || PA_BUILDFLAG(IS_CHROMEOS) +-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) ++#if (BUILDFLAG(IS_LINUX) && defined(__GLIBC__)) || BUILDFLAG(IS_CHROMEOS) - PA_NOINLINE void FreeForTest(void* data) { + NOINLINE void FreeForTest(void* data) { free(data); diff --git a/backports/electron/partalloc-no-tagging-arm64.patch b/backports/electron/partalloc-no-tagging-arm64.patch index 422fcf5..e5c7525 100644 --- a/backports/electron/partalloc-no-tagging-arm64.patch +++ b/backports/electron/partalloc-no-tagging-arm64.patch @@ -3,24 +3,12 @@ missing some required interface headers for it, and it's not clear how to make the partalloc support code for it work. --- ./base/allocator/partition_allocator/partition_alloc.gni.orig +++ ./base/allocator/partition_allocator/partition_alloc.gni -@@ -89,8 +89,7 @@ - # TODO(crbug.com/329199197): Clean this up when experiments are complete. - use_large_empty_slot_span_ring = true +@@ -30,7 +30,7 @@ + } --has_memory_tagging = current_cpu == "arm64" && is_clang && !is_asan && -- !is_hwasan && (is_linux || is_android) -+has_memory_tagging = false + has_memory_tagging = +- current_cpu == "arm64" && is_clang && !is_asan && (is_linux || is_android) ++ false declare_args() { - # Debug configuration. ---- ./base/allocator/partition_allocator/src/partition_alloc/aarch64_support.h.orig -+++ ./base/allocator/partition_allocator/src/partition_alloc/aarch64_support.h -@@ -10,7 +10,7 @@ - #include "partition_alloc/build_config.h" - #include "partition_alloc/partition_alloc_buildflags.h" - --#if PA_BUILDFLAG(IS_ANDROID) || PA_BUILDFLAG(IS_LINUX) -+#if PA_BUILDFLAG(IS_ANDROID) || (PA_BUILDFLAG(IS_LINUX) && defined(__GLIBC__)) - #define HAS_HW_CAPS - #endif - + # Causes all the allocations to be routed via allocator_shim.cc. Usually, diff --git a/backports/electron/perfetto-libstdc++.patch b/backports/electron/perfetto-libstdc++.patch new file mode 100644 index 0000000..31ff9d9 --- /dev/null +++ b/backports/electron/perfetto-libstdc++.patch @@ -0,0 +1,20 @@ +--- a/third_party/perfetto/src/trace_processor/perfetto_sql/engine/created_function.cc ++++ b/third_party/perfetto/src/trace_processor/perfetto_sql/engine/created_function.cc +@@ -107,7 +107,7 @@ + // the destructors run correctly for non-trivial members of the + // union. + using Data = +- std::variant; ++ std::variant; + + StoredSqlValue(SqlValue value) { + switch (value.type) { +@@ -132,7 +132,7 @@ + } + + SqlValue AsSqlValue() { +- if (std::holds_alternative(data)) { ++ if (std::holds_alternative(data)) { + return SqlValue(); + } else if (std::holds_alternative(data)) { + return SqlValue::Long(std::get(data)); diff --git a/backports/electron/pvalloc.patch b/backports/electron/pvalloc.patch index 145e05b..1d874d6 100644 --- a/backports/electron/pvalloc.patch +++ b/backports/electron/pvalloc.patch @@ -2,24 +2,24 @@ the pvalloc/valloc symbols are obsolete and not implemented in musl -- --- a/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_unittest.cc +++ b/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_unittest.cc -@@ -410,7 +410,7 @@ +@@ -375,7 +375,7 @@ ASSERT_GE(aligned_allocs_intercepted_by_alignment[128], 1u); ASSERT_GE(aligned_allocs_intercepted_by_size[53], 1u); --#if PA_BUILDFLAG(IS_POSIX) && !PA_BUILDFLAG(IS_ANDROID) -+#if (PA_BUILDFLAG(IS_POSIX) && defined(__GLIBC__)) && !PA_BUILDFLAG(IS_ANDROID) +-#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_ANDROID) ++#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_ANDROID) && defined(__GLIBC__) void* pvalloc_ptr = pvalloc(67); ASSERT_NE(nullptr, pvalloc_ptr); ASSERT_EQ(0u, reinterpret_cast(pvalloc_ptr) % kPageSize); -@@ -449,7 +449,7 @@ +@@ -414,7 +414,7 @@ free(memalign_ptr); ASSERT_GE(frees_intercepted_by_addr[Hash(memalign_ptr)], 1u); --#if PA_BUILDFLAG(IS_POSIX) && !PA_BUILDFLAG(IS_ANDROID) -+#if (PA_BUILDFLAG(IS_POSIX) && defined(__GLIBC__)) && !PA_BUILDFLAG(IS_ANDROID) +-#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_ANDROID) ++#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_ANDROID) && defined(__GLIBC__) free(pvalloc_ptr); ASSERT_GE(frees_intercepted_by_addr[Hash(pvalloc_ptr)], 1u); - #endif // PA_BUILDFLAG(IS_POSIX) && !PA_BUILDFLAG(IS_ANDROID) + #endif // BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_ANDROID) --- a/base/process/memory_unittest.cc +++ b/base/process/memory_unittest.cc @@ -359,7 +359,7 @@ diff --git a/backports/electron/electron_python-jinja-3.10.patch b/backports/electron/python-jinja-3.10.patch similarity index 100% rename from backports/electron/electron_python-jinja-3.10.patch rename to backports/electron/python-jinja-3.10.patch diff --git a/backports/electron/quiche-array.patch b/backports/electron/quiche-array.patch new file mode 100644 index 0000000..d016b38 --- /dev/null +++ b/backports/electron/quiche-array.patch @@ -0,0 +1,12 @@ +needed for push_back on array +-- +--- a/net/third_party/quiche/src/quiche/common/quiche_endian.h ++++ b/net/third_party/quiche/src/quiche/common/quiche_endian.h +@@ -6,6 +6,7 @@ + #define QUICHE_COMMON_QUICHE_ENDIAN_H_ + + #include ++#include + #include + #include + diff --git a/backports/electron/random-fixes.patch b/backports/electron/random-fixes.patch new file mode 100644 index 0000000..5bfdef5 --- /dev/null +++ b/backports/electron/random-fixes.patch @@ -0,0 +1,94 @@ +Patch-Source: https://gitlab.archlinux.org/archlinux/packaging/packages/chromium/-/blob/c073b0c20935d7eb452732e0f3b2860a96c3db21/random-build-fixes.patch +-- +diff --git a/chrome/browser/download/bubble/download_bubble_update_service.cc b/chrome/browser/download/bubble/download_bubble_update_service.cc +index 41b647f7b44..8940c6bb7fc 100644 +--- a/chrome/browser/download/bubble/download_bubble_update_service.cc ++++ b/chrome/browser/download/bubble/download_bubble_update_service.cc +@@ -91,7 +91,7 @@ ItemSortKey GetSortKey(const Item& item) { + // Helper to get an iterator to the last element in the cache. The cache + // must not be empty. + template +-SortedItems::const_iterator GetLastIter(const SortedItems& cache) { ++typename SortedItems::const_iterator GetLastIter(const SortedItems& cache) { + CHECK(!cache.empty()); + auto it = cache.end(); + return std::prev(it); +@@ -967,9 +967,9 @@ bool DownloadBubbleUpdateService::CacheManager::RemoveItemFromCacheImpl( + } + + template +-SortedItems::iterator ++typename SortedItems::iterator + DownloadBubbleUpdateService::CacheManager::RemoveItemFromCacheByIter( +- SortedItems::iterator iter, ++ typename SortedItems::iterator iter, + SortedItems& cache, + IterMap& iter_map) { + CHECK(iter != cache.end()); +diff --git a/chrome/test/chromedriver/capabilities.cc b/chrome/test/chromedriver/capabilities.cc +index c0708681ebd..98b8494d170 100644 +--- a/chrome/test/chromedriver/capabilities.cc ++++ b/chrome/test/chromedriver/capabilities.cc +@@ -355,7 +355,7 @@ Status ParseMobileEmulation(const base::Value& option, + "'version' field of type string"); + } + +- brands.emplace_back(*brand, *version); ++ brands.emplace_back(BrandVersion{*brand, *version}); + } + + client_hints.brands = std::move(brands); +@@ -392,7 +392,7 @@ Status ParseMobileEmulation(const base::Value& option, + "a 'version' field of type string"); + } + +- full_version_list.emplace_back(*brand, *version); ++ full_version_list.emplace_back(BrandVersion{*brand, *version}); + } + + client_hints.full_version_list = std::move(full_version_list); +diff --git a/components/optimization_guide/core/tflite_model_executor.h b/components/optimization_guide/core/tflite_model_executor.h +index c4f750f4684..b5635f4108b 100644 +--- a/components/optimization_guide/core/tflite_model_executor.h ++++ b/components/optimization_guide/core/tflite_model_executor.h +@@ -189,7 +189,7 @@ class TFLiteModelExecutor : public ModelExecutor { + void SendForBatchExecution( + BatchExecutionCallback callback_on_complete, + base::TimeTicks start_time, +- ModelExecutor::ConstRefInputVector inputs) ++ typename ModelExecutor::ConstRefInputVector inputs) + override { + DCHECK(execution_task_runner_->RunsTasksInCurrentSequence()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); +diff --git a/third_party/blink/renderer/core/html/parser/html_document_parser_fastpath.cc b/third_party/blink/renderer/core/html/parser/html_document_parser_fastpath.cc +index 2dc0b304092..a82f255090b 100644 +--- a/third_party/blink/renderer/core/html/parser/html_document_parser_fastpath.cc ++++ b/third_party/blink/renderer/core/html/parser/html_document_parser_fastpath.cc +@@ -169,7 +169,7 @@ class HTMLFastPathParser { + using Span = base::span; + using USpan = base::span; + // 32 matches that used by HTMLToken::Attribute. +- typedef std::conditional, ++ typedef typename std::conditional, + UCharLiteralBuffer<32>, + LCharLiteralBuffer<32>>::type LiteralBufferType; + typedef UCharLiteralBuffer<32> UCharLiteralBufferType; +diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_style.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_style.cc +index f0b49139147..a308fb67982 100644 +--- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_style.cc ++++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_style.cc +@@ -91,12 +91,12 @@ void CanvasStyle::ApplyToFlags(cc::PaintFlags& flags, + case kGradient: + GetCanvasGradient()->GetGradient()->ApplyToFlags(flags, SkMatrix::I(), + ImageDrawOptions()); +- flags.setColor(SkColor4f(0.0f, 0.0f, 0.0f, global_alpha)); ++ flags.setColor(SkColor4f{0.0f, 0.0f, 0.0f, global_alpha}); + break; + case kImagePattern: + GetCanvasPattern()->GetPattern()->ApplyToFlags( + flags, AffineTransformToSkMatrix(GetCanvasPattern()->GetTransform())); +- flags.setColor(SkColor4f(0.0f, 0.0f, 0.0f, global_alpha)); ++ flags.setColor(SkColor4f{0.0f, 0.0f, 0.0f, global_alpha}); + break; + default: + NOTREACHED(); diff --git a/backports/electron/system-zstd.patch b/backports/electron/system-zstd.patch new file mode 100644 index 0000000..0fcd3ef --- /dev/null +++ b/backports/electron/system-zstd.patch @@ -0,0 +1,46 @@ +From ae3ae3711784865bdc38bf119a6182a7b8dae91c Mon Sep 17 00:00:00 2001 +From: Matt Jolly +Date: Sun, 17 Sep 2023 16:51:42 +1000 +Subject: [PATCH] Add system-zstd + +--- a/build/linux/unbundle/replace_gn_files.py ++++ b/build/linux/unbundle/replace_gn_files.py +@@ -74,6 +74,7 @@ REPLACEMENTS = { + # + 'woff2': 'third_party/woff2/BUILD.gn', + 'zlib': 'third_party/zlib/BUILD.gn', ++ 'zstd': 'third_party/zstd/BUILD.gn', + } + + +--- /dev/null ++++ b/build/linux/unbundle/zstd.gn +@@ -0,0 +1,25 @@ ++import("//build/config/linux/pkg_config.gni") ++import("//build/shim_headers.gni") ++ ++pkg_config("system_zstd") { ++ packages = [ "libzstd" ] ++} ++ ++shim_headers("zstd_shim") { ++ root_path = "src/lib" ++ headers = [ ++ "zdict.h", ++ "zstd.h", ++ "zstd_errors.h", ++ ] ++} ++ ++source_set("zstd") { ++ deps = [ ":zstd_shim" ] ++ public_configs = [ ":system_zstd" ] ++} ++ ++source_set("decompress") { ++ deps = [ ":zstd_shim" ] ++ public_configs = [ ":system_zstd" ] ++} +-- +2.42.0 + diff --git a/backports/electron/unbundle-node.patch b/backports/electron/unbundle-node.patch new file mode 100644 index 0000000..08122af --- /dev/null +++ b/backports/electron/unbundle-node.patch @@ -0,0 +1,68 @@ +--- ./third_party/electron_node/BUILD.gn.orig ++++ ./third_party/electron_node/BUILD.gn +@@ -40,6 +40,8 @@ + node_release_urlbase = "" + + # Allows downstream packagers (eg. Linux distributions) to build Electron against system shared libraries. ++ use_system_ada = false ++ use_system_base64 = false + use_system_cares = false + use_system_nghttp2 = false + use_system_llhttp = false +@@ -48,6 +50,16 @@ + + if (is_linux) { + import("//build/config/linux/pkg_config.gni") ++ if (use_system_ada) { ++ config("ada") { ++ libs = [ "ada" ] ++ } ++ } ++ if (use_system_base64) { ++ pkg_config("base64") { ++ packages = [ "base64" ] ++ } ++ } + if (use_system_cares) { + pkg_config("cares") { + packages = [ "libcares" ] +@@ -258,8 +270,6 @@ + deps = [ + ":node_js2c_exec", + "deps/googletest:gtest", +- "deps/ada", +- "deps/base64", + "deps/simdutf", + "deps/uvwasi", + "//third_party/zlib", +@@ -267,6 +277,16 @@ + "//third_party/brotli:enc", + "//v8:v8_libplatform", + ] ++ if (use_system_ada) { ++ configs += [ ":ada" ] ++ } else { ++ deps += [ "deps/ada" ] ++ } ++ if (use_system_base64) { ++ configs += [ ":base64" ] ++ } else { ++ deps += [ "deps/base64" ] ++ } + if (use_system_cares) { + configs += [ ":cares" ] + } else { +--- ./electron/script/generate-config-gypi.py.orig ++++ ./electron/script/generate-config-gypi.py +@@ -62,6 +62,11 @@ + # Used by certain versions of node-gyp. + v['build_v8_with_gn'] = 'false' + ++ with open(os.path.join(NODE_DIR, 'use_system.txt')) as f: ++ for dep in f.read().strip().split(' '): ++ if v.get(f'node_shared_{dep}') is not None: ++ v[f'node_shared_{dep}'] = 'true' ++ + with open(target_file, 'w+') as f: + f.write(pprint.pformat(config, indent=2)) + diff --git a/backports/electron/electron_webpack-hash.patch b/backports/electron/webpack-hash.patch similarity index 100% rename from backports/electron/electron_webpack-hash.patch rename to backports/electron/webpack-hash.patch diff --git a/backports/electron/yes-musl.patch b/backports/electron/yes-musl.patch new file mode 100644 index 0000000..e860b8e --- /dev/null +++ b/backports/electron/yes-musl.patch @@ -0,0 +1,11 @@ +--- ./buildtools/third_party/libc++/__config_site.orig ++++ ./buildtools/third_party/libc++/__config_site +@@ -18,7 +18,7 @@ + /* #undef _LIBCPP_ABI_FORCE_MICROSOFT */ + /* #undef _LIBCPP_HAS_NO_THREADS */ + /* #undef _LIBCPP_HAS_NO_MONOTONIC_CLOCK */ +-/* #undef _LIBCPP_HAS_MUSL_LIBC */ ++#define _LIBCPP_HAS_MUSL_LIBC 1 + /* #undef _LIBCPP_HAS_THREAD_API_PTHREAD */ + /* #undef _LIBCPP_HAS_THREAD_API_EXTERNAL */ + /* #undef _LIBCPP_HAS_THREAD_API_WIN32 */ diff --git a/backports/element-desktop/APKBUILD b/backports/element-desktop/APKBUILD deleted file mode 100644 index c5d8fd7..0000000 --- a/backports/element-desktop/APKBUILD +++ /dev/null @@ -1,172 +0,0 @@ -# Contributor: lauren n. liberda -maintainer="lauren n. liberda " -pkgname=element-desktop -pkgver=1.12.3 -pkgrel=1 -pkgdesc="Secure and independent communication, connected via Matrix" -url="https://element.io/" -arch="aarch64 x86_64" # same as electron -license="GPL-3.0-only" -_electronver=39 -depends=" - electron~$_electronver - font-inconsolata - font-inter - font-nunito - font-opensans - font-twemoji - " -makedepends=" - cargo - electron-dev~$_electronver - electron-tasje - jq - libsecret-dev - nodejs - npm - python3 - py3-setuptools - sqlcipher-dev - swc - yarn - " -source=" - https://github.com/vector-im/element-desktop/archive/refs/tags/v$pkgver/element-desktop-$pkgver.tar.gz - https://github.com/vector-im/element-web/archive/refs/tags/v$pkgver/element-web-$pkgver.tar.gz - - add-alpine-targets.patch - use-system-headers.patch - tasje-fixes.patch - no-source-maps.patch.web - use-system-fonts.patch.web - - element-desktop - " -options="net !check" # broken -# Avoid conflicting providers -sonameprefix="$pkgname:" - -# secfixes: -# 1.11.30-r0: -# - CVE-2023-30609 -# 1.11.26-r0: -# - CVE-2023-28103 -# - CVE-2023-28427 -# 1.11.7-r0: -# - CVE-2022-39249 -# - CVE-2022-39250 -# - CVE-2022-39251 -# - CVE-2022-39236 -# 1.11.4-r0: -# - CVE-2022-36059 -# - CVE-2022-36060 - -# used by buildscripts (at least web's webpack) -export VERSION=$pkgver - -export CARGO_PROFILE_RELEASE_OPT_LEVEL=2 -export CARGO_PROFILE_RELEASE_STRIP="symbols" -export NODE_OPTIONS="--openssl-legacy-provider" - -prepare() { - default_prepare - - msg "Applying more patches" - for x in $source; do - case "$x" in - *.patch.web) - msg "$x" - patch -p1 -i "$srcdir"/$x -d "$srcdir"/element-web-$pkgver - ;; - esac - done - - rm -rf res/fonts - - ( - cd "$srcdir"/element-web-$pkgver - - msg "Fetch element-web dependencies" - yarn install --frozen-lockfile --ignore-scripts --ignore-engines - jq '.show_labs_settings = true' < config.sample.json > config.json - ) - - ln -s "$srcdir"/element-web-$pkgver/webapp webapp - - msg "Fetch element-desktop dependencies" - yarn install --frozen-lockfile --ignore-scripts - patch -p1 -i patches/@types+auto-launch+5.0.5.patch -} - -build() { - ( - cd "$srcdir"/element-web-$pkgver - - msg "Build element-web" - NODE_ENV=production yarn build - ) - - msg "Build element-desktop" - - yarn asar-webapp - - # add "optional" native dependencies - # hak stands for hack - yarn run hak --target "$(uname -m)-alpine-linux-musl" - - yarn build:ts - - yarn build:res - - # we need it as js to be of any use for tasje. - # fails with `yarn tsc`. https://github.com/electron-userland/electron-builder/issues/7961 - swc compile electron-builder.ts --out-file electron-builder.mjs - - yarn install --frozen-lockfile --ignore-scripts --production - - npm rebuild keytar-forked --nodedir=/usr/include/electron/node_headers --build-from-source - find node_modules/keytar-forked/build/ -type f \ - \! -path node_modules/keytar-forked/build/Release/keytar.node \ - -delete - # stripping in build because it gets into asar - strip node_modules/keytar-forked/build/Release/keytar.node - - tasje -c electron-builder.mjs pack -} - -check() { - ( - cd "$srcdir"/element-web-$pkgver - - yarn test - ) -} - -package() { - local resources="dist/resources" - - install -Dm644 $resources/app.asar "$pkgdir"/usr/lib/element-desktop/app.asar - install -Dm644 webapp.asar "$pkgdir"/usr/lib/element-desktop/webapp.asar - - cp -r $resources/app.asar.unpacked "$pkgdir"/usr/lib/element-desktop/app.asar.unpacked - - install -Dm644 $resources/build/icon.png "$pkgdir"/usr/lib/element-desktop/build/icon.png - - install -Dm755 "$srcdir"/$pkgname "$pkgdir"/usr/bin/$pkgname - - install -Dm644 dist/$pkgname.desktop "$pkgdir"/usr/share/applications/$pkgname.desktop - while read -r size; do - install -Dm644 dist/icons/$size.png "$pkgdir"/usr/share/icons/hicolor/$size/apps/$pkgname.png - done < dist/icons/size-list -} - -sha512sums=" -f302907165a35f4a4f069f5aec6bc28edeba3d09c75f483c818e3930ceb4e838e5bb91ad9d42019a11a661d6e656da3c1ff25507cbb281c69183aac7d499e882 element-desktop-1.12.3.tar.gz -b845ff71ca39d7ae4dca9bb55e821bfdf911b12de5d012ba55d598f3287046fb2b525bce608925a9fa8fa7d39a4ceed9b4213d5d1c1d0c9e6b9b72154c9a35a5 element-web-1.12.3.tar.gz -4747893ed3e43d3074e9afe1cdd668a6be0de073d439205fe8c38c5e0f4091cc76e3cd15d98818bea5139add29501d8d07e83c58e9da230a4ce5bb538d388f80 add-alpine-targets.patch -755b17f7b828eb6920c06a6950ad4e14c32c99d22e9c05fcef7a081b5d2034adb03db3958aa5209c99fb7201f4d888c2383fc9864c5e743dd33f8b5c4925acd7 use-system-headers.patch -a5d90dd1ec7aec0dc18b73eb3a6fd51ac1223e381c492d24e7dc0fd2ade955ac727cebbaff6ffa27c7e18d9acf712c709de3f886ee2ddf87ab3b028d3eb461c6 tasje-fixes.patch -ec635fde026f7fce8e8cc57960b5b9dcec4418416d4867ed47711422d48f068bb58a3c9ceb7715efc9c177beca3788da6b0babc9b689ea8c0724a0395f2b85f8 no-source-maps.patch.web -aaf46476bac403aa5204aa265fcf0654fad4c149fd74d0ec4273c051a5549943384cae3cdd62c5b78fdedfed55c11ecceb898b886e44165cbe7e30953a095cf9 use-system-fonts.patch.web -afc588311dc3b566a754e3e7fe6b37b99a06d47b8bbce0ed9acca8ef308fdab0bd1d41b406199e5cbdd86bdce695ff847cd8668857a235cbdc292ad8b899c063 element-desktop -" diff --git a/backports/element-desktop/add-alpine-targets.patch b/backports/element-desktop/add-alpine-targets.patch deleted file mode 100644 index 87e1148..0000000 --- a/backports/element-desktop/add-alpine-targets.patch +++ /dev/null @@ -1,52 +0,0 @@ ---- a/scripts/hak/target.ts -+++ b/scripts/hak/target.ts -@@ -29,8 +29,10 @@ - | "i686-unknown-linux-gnu" - | "x86_64-unknown-linux-musl" - | "x86_64-unknown-linux-gnu" -+ | "x86_64-alpine-linux-musl" - | "aarch64-unknown-linux-musl" - | "aarch64-unknown-linux-gnu" -+ | "aarch64-alpine-linux-musl" - | "powerpc64le-unknown-linux-musl" - | "powerpc64le-unknown-linux-gnu"; - -@@ -112,6 +114,13 @@ - libC: MUSL, - }; - -+const x8664AlpineLinuxMusl: LinuxTarget = { -+ id: "x86_64-alpine-linux-musl", -+ platform: "linux", -+ arch: "x64", -+ libC: MUSL, -+}; -+ - const i686UnknownLinuxGnu: LinuxTarget = { - id: "i686-unknown-linux-gnu", - platform: "linux", -@@ -140,6 +149,13 @@ - libC: MUSL, - }; - -+const aarch64AlpineLinuxMusl: LinuxTarget = { -+ id: "aarch64-alpine-linux-musl", -+ platform: "linux", -+ arch: "arm64", -+ libC: MUSL, -+}; -+ - const powerpc64leUnknownLinuxGnu: LinuxTarget = { - id: "powerpc64le-unknown-linux-gnu", - platform: "linux", -@@ -167,8 +183,10 @@ - "i686-unknown-linux-gnu": i686UnknownLinuxGnu, - "x86_64-unknown-linux-musl": x8664UnknownLinuxMusl, - "x86_64-unknown-linux-gnu": x8664UnknownLinuxGnu, -+ "x86_64-alpine-linux-musl": x8664AlpineLinuxMusl, - "aarch64-unknown-linux-musl": aarch64UnknownLinuxMusl, - "aarch64-unknown-linux-gnu": aarch64UnknownLinuxGnu, -+ "aarch64-alpine-linux-musl": aarch64AlpineLinuxMusl, - "powerpc64le-unknown-linux-musl": powerpc64leUnknownLinuxMusl, - "powerpc64le-unknown-linux-gnu": powerpc64leUnknownLinuxGnu, - }; diff --git a/backports/element-desktop/element-desktop b/backports/element-desktop/element-desktop deleted file mode 100755 index de3c5b2..0000000 --- a/backports/element-desktop/element-desktop +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -exec electron /usr/lib/element-desktop/app.asar "$@" diff --git a/backports/element-desktop/no-source-maps.patch.web b/backports/element-desktop/no-source-maps.patch.web deleted file mode 100644 index 86b3bac..0000000 --- a/backports/element-desktop/no-source-maps.patch.web +++ /dev/null @@ -1,18 +0,0 @@ ---- ./webpack.config.js.orig -+++ ./webpack.config.js -@@ -102,15 +102,6 @@ - } - - const development = {}; -- if (devMode) { -- // Embedded source maps for dev builds, can't use eval-source-map due to CSP -- development["devtool"] = "inline-source-map"; -- } else { -- // High quality source maps in separate .map files which include the source. This doesn't bulk up the .js -- // payload file size, which is nice for performance but also necessary to get the bundle to a small enough -- // size that sentry will accept the upload. -- development["devtool"] = "source-map"; -- } - - // Resolve the directories for the js-sdk for later use. We resolve these early, so we - // don't have to call them over and over. We also resolve to the package.json instead of the src diff --git a/backports/element-desktop/tasje-fixes.patch b/backports/element-desktop/tasje-fixes.patch deleted file mode 100644 index 0e026c5..0000000 --- a/backports/element-desktop/tasje-fixes.patch +++ /dev/null @@ -1,33 +0,0 @@ -directories in .hak/hakModules are already symlinked inside node_modules, -and as such are already being copied by default. this makes tasje fail with: -``` -thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: -FileAlreadyWritten("/node_modules/keytar/package.json")', src/main.rs:200:18 -``` - -console.log interferes with tasje, which reads config from node stdout - ---- ./electron-builder.ts.orig -+++ ./electron-builder.ts -@@ -72,10 +72,6 @@ - console.warn(`No VARIANT_PATH specified, using default variant configuration '${DEFAULT_VARIANT}':`); - } - --for (const key in variant) { -- console.log(`${key}: ${variant[key]}`); --} -- - interface Configuration extends BaseConfiguration { - extraMetadata: Partial> & ExtraMetadata; - linux: BaseConfiguration["linux"]; -@@ -112,10 +108,6 @@ - }, - files: [ - "package.json", -- { -- from: ".hak/hakModules", -- to: "node_modules", -- }, - "lib/**", - ], - extraResources: ["build/icon.*", "webapp.asar"], diff --git a/backports/element-desktop/use-system-fonts.patch.web b/backports/element-desktop/use-system-fonts.patch.web deleted file mode 100644 index 855fdea..0000000 --- a/backports/element-desktop/use-system-fonts.patch.web +++ /dev/null @@ -1,79 +0,0 @@ ---- a/src/vector/jitsi/index.pcss -+++ b/src/vector/jitsi/index.pcss -@@ -14,7 +14,7 @@ - font-family: "Nunito"; - font-style: normal; - font-weight: 400; -- src: url("$(res)/fonts/Nunito/Nunito-Regular.ttf") format("truetype"); -+ src: local("Nunito Regular"); - } - - $dark-fg: #edf3ff; ---- a/res/themes/light/css/_fonts.pcss -+++ b/res/themes/light/css/_fonts.pcss -@@ -5,16 +5,16 @@ - @font-face { - font-family: "Twemoji"; - font-weight: 400; -- src: url("$(res)/fonts/Twemoji_Mozilla/TwemojiMozilla-colr.woff2") format("woff2"); -+ src: local("Twemoji"); - } - /* For at least Chrome on Windows 10, we have to explictly add extra weights for the emoji to appear in bold messages, etc. */ - @font-face { - font-family: "Twemoji"; - font-weight: 600; -- src: url("$(res)/fonts/Twemoji_Mozilla/TwemojiMozilla-colr.woff2") format("woff2"); -+ src: local("Twemoji"); - } - @font-face { - font-family: "Twemoji"; - font-weight: 700; -- src: url("$(res)/fonts/Twemoji_Mozilla/TwemojiMozilla-colr.woff2") format("woff2"); -+ src: local("Twemoji"); - } ---- a/res/themes/legacy-light/css/_fonts.pcss -+++ b/res/themes/legacy-light/css/_fonts.pcss -@@ -23,17 +23,17 @@ - font-family: "Nunito"; - font-style: normal; - font-weight: 400; -- src: url("$(res)/fonts/Nunito/Nunito-Regular.ttf") format("truetype"); -+ src: local("Nunito Regular"); - } - @font-face { - font-family: "Nunito"; - font-style: normal; - font-weight: 600; -- src: url("$(res)/fonts/Nunito/Nunito-SemiBold.ttf") format("truetype"); -+ src: local("Nunito SemiBold"); - } - @font-face { - font-family: "Nunito"; - font-style: normal; - font-weight: 700; -- src: url("$(res)/fonts/Nunito/Nunito-Bold.ttf") format("truetype"); -+ src: local("Nunito Bold"); - } ---- ./src/theme.ts.orig -+++ ./src/theme.ts -@@ -7,20 +7,6 @@ - Please see LICENSE files in the repository root for full details. - */ - --import "@fontsource/inter/400.css"; --import "@fontsource/inter/400-italic.css"; --import "@fontsource/inter/500.css"; --import "@fontsource/inter/500-italic.css"; --import "@fontsource/inter/600.css"; --import "@fontsource/inter/600-italic.css"; --import "@fontsource/inter/700.css"; --import "@fontsource/inter/700-italic.css"; -- --import "@fontsource/inconsolata/latin-ext-400.css"; --import "@fontsource/inconsolata/latin-400.css"; --import "@fontsource/inconsolata/latin-ext-700.css"; --import "@fontsource/inconsolata/latin-700.css"; -- - import { logger } from "matrix-js-sdk/src/logger"; - - import { _t } from "./languageHandler"; diff --git a/backports/element-desktop/use-system-headers.patch b/backports/element-desktop/use-system-headers.patch deleted file mode 100644 index 6ea957b..0000000 --- a/backports/element-desktop/use-system-headers.patch +++ /dev/null @@ -1,15 +0,0 @@ ---- a/scripts/hak/hakEnv.ts -+++ b/scripts/hak/hakEnv.ts -@@ -101,11 +101,10 @@ - ...process.env, - npm_config_arch: this.target.arch, - npm_config_target_arch: this.target.arch, -- npm_config_disturl: "https://electronjs.org/headers", -+ npm_config_nodedir: "/usr/include/electron/node_headers", - npm_config_runtime: this.runtime, - npm_config_target: this.runtimeVersion, - npm_config_build_from_source: "true", -- npm_config_devdir: path.join(os.homedir(), ".electron-gyp"), - }; - } - diff --git a/backports/fdm-materials/APKBUILD b/backports/fdm-materials/APKBUILD new file mode 100644 index 0000000..5bde97d --- /dev/null +++ b/backports/fdm-materials/APKBUILD @@ -0,0 +1,27 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +pkgname=fdm-materials +pkgver=5.2.2 +pkgrel=0 +pkgdesc="FDM Material Database" +url="https://github.com/Ultimaker/fdm_materials" +arch="noarch" +license="CC0-1.0" +makedepends="cmake samurai" +options="!check" # no checks provided +source="$pkgname-$pkgver.tar.gz::https://github.com/Ultimaker/fdm_materials/archive/refs/tags/$pkgver.tar.gz" +builddir="$srcdir/fdm_materials-$pkgver" + +build() { + cmake -B build -G Ninja \ + -DCMAKE_INSTALL_PREFIX=/usr + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} + +sha512sums=" +73eefec8b7b88af73afc578ffba583480bda30309945b1720d7a1a075bd7ab3279599d53fe83f4c96695f294a5a3e11297abc334ca6cc9db163d4eb0fbdaf0f9 fdm-materials-5.2.2.tar.gz +" diff --git a/backports/freecad/APKBUILD b/backports/freecad/APKBUILD new file mode 100644 index 0000000..30c9eb5 --- /dev/null +++ b/backports/freecad/APKBUILD @@ -0,0 +1,108 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +pkgname=freecad +pkgver=0.20.2 +pkgrel=5 +pkgdesc="Free and open source 3D parametric modeler" +url="https://freecadweb.org/" +license="LGPL-2.0-or-later" +arch="" # removed dependency py3-pyside2 +#arch="x86_64" # dependency OpenCascade is only x86_64 +depends=" + graphviz + hdf5 + opencascade + py3-matplotlib + py3-numpy + py3-pivy + py3-ply + py3-pyside2 + py3-six + py3-yaml + python3 + " +makedepends=" + boost-dev + cmake + coin-dev + doxygen + eigen-dev + freeimage-dev + glu-dev + hdf5-dev + libmedc-dev + libshiboken2-dev + onetbb-dev + opencascade-dev + py3-pyside2-dev + python3-dev + shiboken2 + qt5-qtsvg-dev + qt5-qtwebengine-dev + qt5-qtxmlpatterns-dev + samurai + swig + vtk-dev + xerces-c-dev + " +checkdepends="xvfb-run mesa mesa-dri-gallium font-opensans" +source="https://github.com/FreeCAD/FreeCAD/archive/$pkgver/freecad-$pkgver.tar.gz + $pkgname-python3.11-1.patch::https://github.com/FreeCAD/FreeCAD/commit/fe02d63c8c9b1280978be841d04e68a0a55cceb9.patch + numpy-1.20.patch + no-execinfo.patch + no-workaround-spnav.patch + resourceDirectory.patch + tests.patch + opencascade-7.8.0.patch + missing-include-cstdint.patch + " +builddir="$srcdir/FreeCAD-$pkgver" + +build() { + cmake -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_C_FLAGS="$CFLAGS -fPIC -w" \ + -DCMAKE_CXX_FLAGS="$CXXFLAGS -fPIC -w" \ + -DCMAKE_INSTALL_PREFIX=/usr/lib/freecad \ + -DCMAKE_INSTALL_DATADIR=/usr/share/freecad \ + -DCMAKE_INSTALL_DATAROOTDIR=/usr/share \ + -DCMAKE_INSTALL_DOCDIR=/usr/share/freecad/doc \ + -DBUILD_ENABLE_CXX_STD=C++17 \ + -DBUILD_QT5=ON \ + -DFREECAD_USE_EXTERNAL_PIVY=ON \ + -DFREECAD_USE_OCC_VARIANT="Official Version" \ + -DFREECAD_USE_QT_FILEDIALOG=ON \ + -DPYTHON_EXECUTABLE=/usr/bin/python3 + cmake --build build +} + +check() { + DESTDIR=test_install cmake --install build + mkdir -p test_install/usr/bin + ln -s ../lib/freecad/bin/FreeCAD test_install/usr/bin/FreeCAD + ln -s ../lib/freecad/bin/FreeCADCmd test_install/usr/bin/FreeCADCmd + LD_LIBRARY_PATH="$PWD"/test_install/usr/lib/freecad/lib \ + xvfb-run "$PWD"/test_install/usr/bin/FreeCAD -t 0 +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # FreeCAD does not initialize correctly when binaries + # are located under /usr/bin; thus, symlinks are necessary. + install -d "$pkgdir"/usr/bin + ln -s /usr/lib/freecad/bin/FreeCAD "$pkgdir"/usr/bin/FreeCAD + ln -s /usr/lib/freecad/bin/FreeCADCmd "$pkgdir"/usr/bin/FreeCADCmd +} + +sha512sums=" +c3acd77dd2bb9a2a23ac354da3b6102effb89c95d675e91421d65486414dfe8cc0188a7212245e0deb63f17b9c5df76133017be09e4cd14b833be8cbec52a08d freecad-0.20.2.tar.gz +75a237f7ed7a89a98c0e5bdb3d3f0788749602daf718089aa0814e05f93ced1e15ad5867c7c87f170b48c5984f9ace1bbc95c4f386ce72bfb8d616323b47f1e5 freecad-python3.11-1.patch +80b08b031810fce7b6d698c662f64fa4f8a904f283f46b478b1d718529164c0ee61ce190f633abf04e03212720480f3f0603b0c1e160af79d7b6bb82da3bd0e4 numpy-1.20.patch +73aaba7015dce7048eb7d2456131b5b5ba4673cc980503331987be54d99daed5f61db015ca33d7d2ef0f02bd3192da8ce122c103c3b93f9959927deb4f0b933e no-execinfo.patch +15696bdaaf77482f1b5d3806535a8004c8cec7d598d62092d9f0394b4ca9e2ad6cedd77c4b86a83a06324d16678c1c6bbf3a390b807729717a2f513e858afd50 no-workaround-spnav.patch +8ba13b17bad66316757d180c1b9e9e72a24382627eac7c43a2264b3b5101e6e8f701775f2b805ed733f500fbcd8b0e8e422ec58a9ab3d948d613b666157d4c52 resourceDirectory.patch +5db19e0aa2ca1fd21f4c56afc9db54390a799262aaa0a741704c2c304b0068fd6ca1dcc086465e12e9c0cfe06aac750aaf9b8f5f4db324539af4dd3394803ff9 tests.patch +f933680dea8744e147f38abce389cb7fd0ec3fb3566454fdd5e6ea07b2faaac5fe61aabe1df3bda9f0d7b4fca16055aa2ad700e9cce10d2604ae37b761b68ade opencascade-7.8.0.patch +fec515cc63830f0e715527c7890173705b24e7d99d225821ec4300104cf3affdee49243bbd4d0a331a902cf04db756a1b8f18f0a17cc71f5757f8b5c73c78ede missing-include-cstdint.patch +" diff --git a/backports/freecad/missing-include-cstdint.patch b/backports/freecad/missing-include-cstdint.patch new file mode 100644 index 0000000..363a706 --- /dev/null +++ b/backports/freecad/missing-include-cstdint.patch @@ -0,0 +1,11 @@ +diff --color -rupN a/src/3rdParty/libE57Format/include/E57Format.h b/src/3rdParty/libE57Format/include/E57Format.h +--- a/src/3rdParty/libE57Format/include/E57Format.h 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/3rdParty/libE57Format/include/E57Format.h 2024-02-27 14:06:29.308892531 +0100 +@@ -32,6 +32,7 @@ + //! @file E57Format.h header file for the E57 API + + #include ++#include + #include + #include + diff --git a/backports/freecad/no-execinfo.patch b/backports/freecad/no-execinfo.patch new file mode 100644 index 0000000..3e1c39c --- /dev/null +++ b/backports/freecad/no-execinfo.patch @@ -0,0 +1,46 @@ +diff --git a/src/3rdParty/salomesmesh/src/DriverSTL/Basics_Utils.cpp b/src/3rdParty/salomesmesh/src/DriverSTL/Basics_Utils.cpp +index 23c5083..54c7ecf 100644 +--- a/src/3rdParty/salomesmesh/src/DriverSTL/Basics_Utils.cpp ++++ b/src/3rdParty/salomesmesh/src/DriverSTL/Basics_Utils.cpp +@@ -29,7 +29,6 @@ + #ifndef WIN32 + #include + #include +-#include + #endif + + +@@ -109,20 +108,7 @@ namespace Kernel_Utils + #ifndef WIN32 + void print_traceback() + { +- void *array[50]; +- size_t size; +- char **strings; +- size_t i; +- +- size = backtrace (array, 40); +- strings = backtrace_symbols (array, size); +- +- for (i = 0; i < size; i++) +- { +- std::cerr << strings[i] << std::endl; +- } +- +- free (strings); ++ std::cerr << "there is no backtrace." << std::endl; + } + #else + #if (_MSC_VER >= 1400) // Visual Studio 2005 +diff --git a/src/App/Application.cpp b/src/App/Application.cpp +index 3081623..ba3525f 100644 +--- a/src/App/Application.cpp ++++ b/src/App/Application.cpp +@@ -1732,7 +1732,6 @@ static void freecadNewHandler () + #endif + + #if defined(FC_OS_LINUX) +-#include + #include + #include + diff --git a/backports/freecad/no-workaround-spnav.patch b/backports/freecad/no-workaround-spnav.patch new file mode 100644 index 0000000..ee4fead --- /dev/null +++ b/backports/freecad/no-workaround-spnav.patch @@ -0,0 +1,69 @@ +Patch-Source: https://github.com/FreeCAD/FreeCAD/commit/7b377a216b9185960e4cee980a6504dc1a755f50 +fixes stderr reassignment +-- +From 7b377a216b9185960e4cee980a6504dc1a755f50 Mon Sep 17 00:00:00 2001 +From: wmayer +Date: Wed, 29 Jun 2022 15:19:18 +0200 +Subject: [PATCH] Gui: remove workaround for spnav 0.23 due to build failure + with musl libc + +--- + src/Gui/3Dconnexion/GuiNativeEventLinux.cpp | 27 --------------------- + 1 file changed, 27 deletions(-) + +diff --git a/src/Gui/3Dconnexion/GuiNativeEventLinux.cpp b/src/Gui/3Dconnexion/GuiNativeEventLinux.cpp +index 7f0ddd75d262..455ece0b36bd 100644 +--- a/src/Gui/3Dconnexion/GuiNativeEventLinux.cpp ++++ b/src/Gui/3Dconnexion/GuiNativeEventLinux.cpp +@@ -21,42 +21,17 @@ + ***************************************************************************/ + + #include +-#include + + #include "GuiNativeEventLinux.h" + + #include "GuiApplicationNativeEventAware.h" + #include +-#include + #include + + #include + + #include + +-namespace { +-class RedirectStdErr +-{ +-public: +- RedirectStdErr() +- : fi(Base::FileInfo::getTempFileName()) +- , file(stderr) +- { +- stderr = fopen(fi.filePath().c_str(), "w"); +- } +- ~RedirectStdErr() +- { +- fclose(stderr); +- fi.deleteFile(); +- stderr = file; +- } +- +-private: +- Base::FileInfo fi; +- FILE* file; +-}; +-} +- + Gui::GuiNativeEvent::GuiNativeEvent(Gui::GUIApplicationNativeEventAware *app) + : GuiAbstractNativeEvent(app) + { +@@ -72,8 +47,6 @@ Gui::GuiNativeEvent::~GuiNativeEvent() + + void Gui::GuiNativeEvent::initSpaceball(QMainWindow *window) + { +- // tmp. redirect stderr to a file to suppress an error message from spnav_open() +- RedirectStdErr err; + Q_UNUSED(window) + if (spnav_open() == -1) { + Base::Console().Log("Couldn't connect to spacenav daemon. Please ignore if you don't have a spacemouse.\n"); diff --git a/backports/freecad/numpy-1.20.patch b/backports/freecad/numpy-1.20.patch new file mode 100644 index 0000000..20f4b41 --- /dev/null +++ b/backports/freecad/numpy-1.20.patch @@ -0,0 +1,25 @@ +Patch-Source: https://github.com/FreeCAD/FreeCAD/commit/8b0df1dc936b544091f6a2d68df1c1a14ae3de5b +-- +From 8b0df1dc936b544091f6a2d68df1c1a14ae3de5b Mon Sep 17 00:00:00 2001 +From: lorenz +Date: Tue, 27 Dec 2022 04:59:35 +0100 +Subject: [PATCH] FEM: femmesh: fix AttributeError: module 'numpy' has no + attribute 'int' + +--- + src/Mod/Fem/femmesh/meshtools.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/Mod/Fem/femmesh/meshtools.py b/src/Mod/Fem/femmesh/meshtools.py +index dd8671b..d2e2b0a 100644 +--- a/src/Mod/Fem/femmesh/meshtools.py ++++ b/src/Mod/Fem/femmesh/meshtools.py +@@ -485,7 +485,7 @@ def get_femelement_sets( + # fem_objects = FreeCAD FEM document objects + # get femelements for reference shapes of each obj.References + count_femelements = 0 +- referenced_femelements = np.zeros((max(femelement_table.keys())+1,),dtype=np.int) ++ referenced_femelements = np.zeros((max(femelement_table.keys())+1,),dtype=int) + has_remaining_femelements = None + for fem_object_i, fem_object in enumerate(fem_objects): + obj = fem_object["Object"] diff --git a/backports/freecad/opencascade-7.8.0.patch b/backports/freecad/opencascade-7.8.0.patch new file mode 100644 index 0000000..582fbde --- /dev/null +++ b/backports/freecad/opencascade-7.8.0.patch @@ -0,0 +1,877 @@ +Fix compilation with opencascase 7.8.0 + +Base on https://github.com/FreeCAD/FreeCAD/pull/11909 + +diff --color -rupN a/cMake/FindOCC.cmake b/cMake/FindOCC.cmake +--- a/cMake/FindOCC.cmake 2022-12-07 03:35:37.000000000 +0100 ++++ b/cMake/FindOCC.cmake 2024-02-27 15:00:48.248873883 +0100 +@@ -127,8 +127,6 @@ if(OCC_FOUND) + TKG2d + TKG3d + TKMath +- TKIGES +- TKSTL + TKShHealing + TKXSBase + TKBool +@@ -139,10 +137,6 @@ if(OCC_FOUND) + TKGeomBase + TKOffset + TKPrim +- TKSTEPBase +- TKSTEPAttr +- TKSTEP209 +- TKSTEP + TKHLR + TKFeat + ) +@@ -154,17 +148,19 @@ if(OCC_FOUND) + TKLCAF + TKVCAF + TKCDF +- TKXDESTEP +- TKXDEIGES + TKMeshVS + TKService + TKV3d + ) +- if(OCC_VERSION_STRING VERSION_LESS 6.7.3) +- list(APPEND OCC_OCAF_LIBRARIES TKAdvTools) +- elseif(NOT OCC_VERSION_STRING VERSION_LESS 7.5.0) ++ if(NOT OCC_VERSION_STRING VERSION_LESS 7.5.0) + list(APPEND OCC_OCAF_LIBRARIES TKRWMesh) +- endif(OCC_VERSION_STRING VERSION_LESS 6.7.3) ++ endif(NOT OCC_VERSION_STRING VERSION_LESS 7.5.0) ++ if(OCC_VERSION_STRING VERSION_LESS 7.8.0) ++ list(APPEND OCC_LIBRARIES TKIGES TKSTL TKSTEPBase TKSTEPAttr TKSTEP209 TKSTEP) ++ list(APPEND OCC_OCAF_LIBRARIES TKXDESTEP TKXDEIGES) ++ else(OCC_VERSION_STRING VERSION_LESS 7.8.0) ++ list(APPEND OCC_LIBRARIES TKDESTEP TKDEIGES TKDEGLTF TKDESTL) ++ endif(OCC_VERSION_STRING VERSION_LESS 7.8.0) + message(STATUS "-- Found OCE/OpenCASCADE version: ${OCC_VERSION_STRING}") + message(STATUS "-- OCE/OpenCASCADE include directory: ${OCC_INCLUDE_DIR}") + message(STATUS "-- OCE/OpenCASCADE shared libraries directory: ${OCC_LIBRARY_DIR}") +diff --color -rupN a/src/3rdParty/salomesmesh/inc/SMESHDS_DataMapOfShape.hxx b/src/3rdParty/salomesmesh/inc/SMESHDS_DataMapOfShape.hxx +--- a/src/3rdParty/salomesmesh/inc/SMESHDS_DataMapOfShape.hxx 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/3rdParty/salomesmesh/inc/SMESHDS_DataMapOfShape.hxx 2024-02-27 15:00:48.248873883 +0100 +@@ -29,22 +29,35 @@ + + #include + ++#include ++ + /* + * This method needed for instance NCollection_DataMap with TopoDS_Shape as key + */ ++#if OCC_VERSION_HEX >= 0x070800 + struct SMESHDS_Hasher + { +- static inline Standard_Boolean IsEqual(const TopoDS_Shape& S1, +- const TopoDS_Shape& S2) +- { +- return S1.IsSame(S2); ++ size_t operator()(const TopoDS_Shape& S) const noexcept { ++ return std::hash{}(S); + } +- static inline Standard_Integer HashCode(const TopoDS_Shape& S, +- const Standard_Integer Upper) +- { +- return ::HashCode( S, Upper); ++ size_t operator()(const TopoDS_Shape& S1, const TopoDS_Shape& S2) const noexcept { ++ return S1.IsSame(S2); + } + }; +- ++#else ++struct SMESHDS_Hasher ++{ ++static inline Standard_Boolean IsEqual(const TopoDS_Shape& S1, ++ const TopoDS_Shape& S2) ++{ ++ return S1.IsSame(S2); ++} ++static inline Standard_Integer HashCode(const TopoDS_Shape& S, ++ const Standard_Integer Upper) ++{ ++ return ::HashCode( S, Upper); ++} ++}; ++#endif + + #endif +diff --color -rupN a/src/3rdParty/salomesmesh/inc/SMESH_MeshVSLink.hxx b/src/3rdParty/salomesmesh/inc/SMESH_MeshVSLink.hxx +--- a/src/3rdParty/salomesmesh/inc/SMESH_MeshVSLink.hxx 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/3rdParty/salomesmesh/inc/SMESH_MeshVSLink.hxx 2024-02-27 15:00:48.248873883 +0100 +@@ -57,9 +57,6 @@ + #ifndef _MeshVS_EntityType_HeaderFile + #include + #endif +-#ifndef _Standard_Address_HeaderFile +-#include +-#endif + #ifndef _TColStd_HArray1OfInteger_HeaderFile + #include + #endif +diff --color -rupN a/src/3rdParty/salomesmesh/inc/SMESH_SMESH.hxx b/src/3rdParty/salomesmesh/inc/SMESH_SMESH.hxx +--- a/src/3rdParty/salomesmesh/inc/SMESH_SMESH.hxx 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/3rdParty/salomesmesh/inc/SMESH_SMESH.hxx 2024-02-27 15:00:48.248873883 +0100 +@@ -37,4 +37,5 @@ + #define SMESH_EXPORT + #endif + ++#include + #endif +diff --color -rupN a/src/3rdParty/salomesmesh/inc/SMESH_SequenceOfNode.hxx b/src/3rdParty/salomesmesh/inc/SMESH_SequenceOfNode.hxx +--- a/src/3rdParty/salomesmesh/inc/SMESH_SequenceOfNode.hxx 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/3rdParty/salomesmesh/inc/SMESH_SequenceOfNode.hxx 2024-02-27 15:00:48.252207183 +0100 +@@ -28,10 +28,11 @@ + + #include "SMESH_SMESH.hxx" + +-#include + #if OCC_VERSION_HEX >= 0x060703 + #include + #include ++#else ++#include + #endif + + typedef const SMDS_MeshNode* SMDS_MeshNodePtr; +diff --color -rupN a/src/3rdParty/salomesmesh/inc/SMESH_TypeDefs.hxx b/src/3rdParty/salomesmesh/inc/SMESH_TypeDefs.hxx +--- a/src/3rdParty/salomesmesh/inc/SMESH_TypeDefs.hxx 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/3rdParty/salomesmesh/inc/SMESH_TypeDefs.hxx 2024-02-27 15:00:48.252207183 +0100 +@@ -185,11 +185,18 @@ typedef std::vector< UVPtStruct > UVPtSt + + // -------------------------------------------------------------------------------- + // class SMESH_SequenceOfElemPtr ++#include ++#if OCC_VERSION_HEX >= 0x060703 ++#include ++#else + #include ++#endif + + class SMDS_MeshElement; + + typedef const SMDS_MeshElement* SMDS_MeshElementPtr; ++#define DEFINE_SEQUENCE(_ClassName_, _BaseCollection_, TheItemType) \ ++typedef NCollection_Sequence _ClassName_; + + DEFINE_SEQUENCE (SMESH_SequenceOfElemPtr, SMESH_BaseCollectionElemPtr, SMDS_MeshElementPtr) + +diff --color -rupN a/src/3rdParty/salomesmesh/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp b/src/3rdParty/salomesmesh/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp +--- a/src/3rdParty/salomesmesh/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/3rdParty/salomesmesh/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp 2024-02-27 15:00:48.252207183 +0100 +@@ -33,10 +33,33 @@ + #include "SMDS_MeshNode.hxx" + #include "SMESH_File.hxx" + ++#include ++ + namespace + { + struct Hasher + { ++#if OCC_VERSION_HEX >= 0x070800 ++ size_t operator()(const gp_Pnt& point) const noexcept ++ { ++ union ++ { ++ Standard_Real R[3]; ++ Standard_Integer I[6]; ++ } U; ++ ++ point.Coord( U.R[0], U.R[1], U.R[2] ); ++ return std::hash{}(U.I[0]/23+U.I[1]/19+U.I[2]/17+U.I[3]/13+U.I[4]/11+U.I[5]/7); ++ } ++ ++ size_t operator()(const gp_Pnt& point1, const gp_Pnt& point2) const noexcept ++ { ++ static Standard_Real tab1[3], tab2[3]; ++ point1.Coord(tab1[0],tab1[1],tab1[2]); ++ point2.Coord(tab2[0],tab2[1],tab2[2]); ++ return (memcmp(tab1,tab2,sizeof(tab1)) == 0); ++ } ++#else + //======================================================================= + //function : HashCode + //purpose : +@@ -51,9 +74,9 @@ namespace + } U; + + point.Coord( U.R[0], U.R[1], U.R[2] ); +- +- return ::HashCode(U.I[0]/23+U.I[1]/19+U.I[2]/17+U.I[3]/13+U.I[4]/11+U.I[5]/7,Upper); ++ return std::hash{}(U.I[0]/23+U.I[1]/19+U.I[2]/17+U.I[3]/13+U.I[4]/11+U.I[5]/7); + } ++ + //======================================================================= + //function : IsEqual + //purpose : +@@ -66,7 +89,9 @@ namespace + point2.Coord(tab2[0],tab2[1],tab2[2]); + return (memcmp(tab1,tab2,sizeof(tab1)) == 0); + } ++#endif + }; ++ + typedef NCollection_DataMap TDataMapOfPntNodePtr; + + const int HEADER_SIZE = 84; +diff --color -rupN a/src/3rdParty/salomesmesh/src/StdMeshers/StdMeshers_Quadrangle_2D.cpp b/src/3rdParty/salomesmesh/src/StdMeshers/StdMeshers_Quadrangle_2D.cpp +--- a/src/3rdParty/salomesmesh/src/StdMeshers/StdMeshers_Quadrangle_2D.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/3rdParty/salomesmesh/src/StdMeshers/StdMeshers_Quadrangle_2D.cpp 2024-02-27 15:00:48.252207183 +0100 +@@ -48,7 +48,6 @@ + #include + #include + #include +-#include + #include + #include + #include +diff --color -rupN a/src/Mod/Drawing/App/PreCompiled.h b/src/Mod/Drawing/App/PreCompiled.h +--- a/src/Mod/Drawing/App/PreCompiled.h 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Drawing/App/PreCompiled.h 2024-02-27 15:00:48.252207183 +0100 +@@ -70,7 +70,6 @@ + #include + #include + #include +-#include + #include + #include + #include +diff --color -rupN a/src/Mod/Drawing/Gui/TaskDialog.cpp b/src/Mod/Drawing/Gui/TaskDialog.cpp +--- a/src/Mod/Drawing/Gui/TaskDialog.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Drawing/Gui/TaskDialog.cpp 2024-02-27 15:00:48.252207183 +0100 +@@ -29,7 +29,6 @@ + #endif + + +-#include + #include "TaskDialog.h" + #include + #include +diff --color -rupN a/src/Mod/Fem/Gui/PreCompiled.h b/src/Mod/Fem/Gui/PreCompiled.h +--- a/src/Mod/Fem/Gui/PreCompiled.h 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Fem/Gui/PreCompiled.h 2024-02-27 15:00:48.252207183 +0100 +@@ -63,7 +63,6 @@ + #endif + + // OCC +-#include + #include + #include + #include +diff --color -rupN a/src/Mod/Fem/Gui/TaskCreateNodeSet.cpp b/src/Mod/Fem/Gui/TaskCreateNodeSet.cpp +--- a/src/Mod/Fem/Gui/TaskCreateNodeSet.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Fem/Gui/TaskCreateNodeSet.cpp 2024-02-27 15:00:48.252207183 +0100 +@@ -28,7 +28,6 @@ + + # include + # include +-# include + #endif + + #include +diff --color -rupN a/src/Mod/Import/App/ImportOCAF.cpp b/src/Mod/Import/App/ImportOCAF.cpp +--- a/src/Mod/Import/App/ImportOCAF.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Import/App/ImportOCAF.cpp 2024-02-27 15:00:48.252207183 +0100 +@@ -165,7 +165,11 @@ void ImportOCAF::loadShapes(const TDF_La + std::vector localValue; + + if (aShapeTool->GetShape(label,aShape)) { ++#if OCC_VERSION_HEX >= 0x070800 ++ hash = std::hash{}(aShape); ++#else + hash = aShape.HashCode(HashUpper); ++#endif + } + + Handle(TDataStd_Name) name; +@@ -235,7 +239,11 @@ void ImportOCAF::loadShapes(const TDF_La + if (isRef || myRefShapes.find(hash) == myRefShapes.end()) { + TopoDS_Shape aShape; + if (isRef && aShapeTool->GetShape(label, aShape)) ++#if OCC_VERSION_HEX >= 0x070800 ++ myRefShapes.insert(std::hash{}(aShape)); ++#else + myRefShapes.insert(aShape.HashCode(HashUpper)); ++#endif + + if (aShapeTool->IsSimpleShape(label) && (isRef || aShapeTool->IsFree(label))) { + if (!asm_name.empty()) +@@ -565,7 +573,11 @@ void ImportXCAF::createShape(const TopoD + part->Label.setValue(default_name); + part->Shape.setValue(shape); + std::map::const_iterator jt; ++#if OCC_VERSION_HEX >= 0x070800 ++ jt = myColorMap.find(std::hash{}(shape)); ++#else + jt = myColorMap.find(shape.HashCode(INT_MAX)); ++#endif + + App::Color partColor(0.8f,0.8f,0.8f); + #if 0//TODO +@@ -586,7 +598,11 @@ void ImportXCAF::createShape(const TopoD + // set label name if defined + if (setname && !myNameMap.empty()) { + std::map::const_iterator jt; ++#if OCC_VERSION_HEX >= 0x070800 ++ jt = myNameMap.find(std::hash{}(shape)); ++#else + jt = myNameMap.find(shape.HashCode(INT_MAX)); ++#endif + if (jt != myNameMap.end()) { + part->Label.setValue(jt->second); + } +@@ -606,7 +622,11 @@ void ImportXCAF::createShape(const TopoD + faceColors.resize(faces.Extent(), partColor); + xp.Init(shape,TopAbs_FACE); + while (xp.More()) { ++#if OCC_VERSION_HEX >= 0x070800 ++ jt = myColorMap.find(std::hash{}(xp.Current())); ++#else + jt = myColorMap.find(xp.Current().HashCode(INT_MAX)); ++#endif + if (jt != myColorMap.end()) { + int index = faces.FindIndex(xp.Current()); + faceColors[index-1] = convertColor(jt->second); +@@ -641,23 +661,51 @@ void ImportXCAF::loadShapes(const TDF_La + // add the shapes + TopExp_Explorer xp; + for (xp.Init(aShape, TopAbs_SOLID); xp.More(); xp.Next(), ctSolids++) ++#if OCC_VERSION_HEX >= 0x070800 ++ this->mySolids[std::hash{}(xp.Current())] = (xp.Current()); ++#else + this->mySolids[xp.Current().HashCode(INT_MAX)] = (xp.Current()); ++#endif + for (xp.Init(aShape, TopAbs_SHELL, TopAbs_SOLID); xp.More(); xp.Next(), ctShells++) ++#if OCC_VERSION_HEX >= 0x070800 ++ this->myShells[std::hash{}(xp.Current())] = (xp.Current()); ++#else + this->myShells[xp.Current().HashCode(INT_MAX)] = (xp.Current()); ++#endif + // if no solids and no shells were found then go for compounds + if (ctSolids == 0 && ctShells == 0) { + for (xp.Init(aShape, TopAbs_COMPOUND); xp.More(); xp.Next(), ctComps++) ++#if OCC_VERSION_HEX >= 0x070800 ++ this->myCompds[std::hash{}(xp.Current())] = (xp.Current()); ++#else + this->myCompds[xp.Current().HashCode(INT_MAX)] = (xp.Current()); ++#endif + } + if (ctComps == 0) { + for (xp.Init(aShape, TopAbs_FACE, TopAbs_SHELL); xp.More(); xp.Next()) ++#if OCC_VERSION_HEX >= 0x070800 ++ this->myShapes[std::hash{}(xp.Current())] = (xp.Current()); ++#else + this->myShapes[xp.Current().HashCode(INT_MAX)] = (xp.Current()); ++#endif + for (xp.Init(aShape, TopAbs_WIRE, TopAbs_FACE); xp.More(); xp.Next()) ++#if OCC_VERSION_HEX >= 0x070800 ++ this->myShapes[std::hash{}(xp.Current())] = (xp.Current()); ++#else + this->myShapes[xp.Current().HashCode(INT_MAX)] = (xp.Current()); ++#endif + for (xp.Init(aShape, TopAbs_EDGE, TopAbs_WIRE); xp.More(); xp.Next()) ++#if OCC_VERSION_HEX >= 0x070800 ++ this->myShapes[std::hash{}(xp.Current())] = (xp.Current()); ++#else + this->myShapes[xp.Current().HashCode(INT_MAX)] = (xp.Current()); ++#endif + for (xp.Init(aShape, TopAbs_VERTEX, TopAbs_EDGE); xp.More(); xp.Next()) ++#if OCC_VERSION_HEX >= 0x070800 ++ this->myShapes[std::hash{}(xp.Current())] = (xp.Current()); ++#else + this->myShapes[xp.Current().HashCode(INT_MAX)] = (xp.Current()); ++#endif + } + } + +@@ -667,7 +715,11 @@ void ImportXCAF::loadShapes(const TDF_La + hColors->GetColor(label, XCAFDoc_ColorSurf, col) || + hColors->GetColor(label, XCAFDoc_ColorCurv, col)) { + // add defined color ++#if OCC_VERSION_HEX >= 0x070800 ++ myColorMap[std::hash{}(aShape)] = col; ++#else + myColorMap[aShape.HashCode(INT_MAX)] = col; ++#endif + } + else { + // http://www.opencascade.org/org/forum/thread_17107/ +@@ -677,7 +729,11 @@ void ImportXCAF::loadShapes(const TDF_La + hColors->GetColor(it.Value(), XCAFDoc_ColorSurf, col) || + hColors->GetColor(it.Value(), XCAFDoc_ColorCurv, col)) { + // add defined color ++#if OCC_VERSION_HEX >= 0x070800 ++ myColorMap[std::hash{}(it.Value())] = col; ++#else + myColorMap[it.Value().HashCode(INT_MAX)] = col; ++#endif + } + } + } +@@ -690,7 +746,11 @@ void ImportXCAF::loadShapes(const TDF_La + extstr.ToUTF8CString(str); + std::string labelName(str); + if (!labelName.empty()) ++#if OCC_VERSION_HEX >= 0x070800 ++ myNameMap[std::hash{}(aShape)] = labelName; ++#else + myNameMap[aShape.HashCode(INT_MAX)] = labelName; ++#endif + delete [] str; + } + +diff --color -rupN a/src/Mod/Import/App/ImportOCAF.h b/src/Mod/Import/App/ImportOCAF.h +--- a/src/Mod/Import/App/ImportOCAF.h 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Import/App/ImportOCAF.h 2024-02-27 15:00:48.252207183 +0100 +@@ -29,7 +29,6 @@ + #include + #include + #include +-#include + #include + #include + #include +diff --color -rupN a/src/Mod/Import/App/ImportOCAF2.h b/src/Mod/Import/App/ImportOCAF2.h +--- a/src/Mod/Import/App/ImportOCAF2.h 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Import/App/ImportOCAF2.h 2024-02-27 15:06:12.358890276 +0100 +@@ -27,7 +27,6 @@ + #include + #include + #include +-#include + #include + #include + #include +@@ -57,13 +56,21 @@ namespace Import { + + struct ShapeHasher { + std::size_t operator()(const TopoDS_Shape &s) const { ++#if OCC_VERSION_HEX >= 0x070800 ++ return std::hash{}(s); ++#else + return s.HashCode(INT_MAX); ++#endif + } + }; + + struct LabelHasher { + std::size_t operator()(const TDF_Label &l) const { ++#if OCC_VERSION_HEX >= 0x070800 ++ return std::hash {}(l); ++#else + return TDF_LabelMapHasher::HashCode(l,INT_MAX); ++#endif + } + }; + +diff --color -rupN a/src/Mod/MeshPart/App/CurveProjector.h b/src/Mod/MeshPart/App/CurveProjector.h +--- a/src/Mod/MeshPart/App/CurveProjector.h 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/MeshPart/App/CurveProjector.h 2024-02-27 15:00:48.252207183 +0100 +@@ -20,6 +20,7 @@ + * * + ***************************************************************************/ + ++#include + + #ifndef _CurveProjector_h_ + #define _CurveProjector_h_ +@@ -64,8 +65,13 @@ public: + + template + struct TopoDSLess { +- bool operator()(const T& x, const T& y) const { +- return x.HashCode(INT_MAX-1) < y.HashCode(INT_MAX-1); ++ bool operator()(const T& x, const T& y) const { ++#if OCC_VERSION_HEX >= 0x070800 ++ std::hash hasher; ++ return hasher(x) < hasher(y); ++#else ++ return x.HashCode(INT_MAX-1) < y.HashCode(INT_MAX-1); ++#endif + } + }; + +diff --color -rupN a/src/Mod/MeshPart/App/PreCompiled.h b/src/Mod/MeshPart/App/PreCompiled.h +--- a/src/Mod/MeshPart/App/PreCompiled.h 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/MeshPart/App/PreCompiled.h 2024-02-27 15:00:48.252207183 +0100 +@@ -76,7 +76,6 @@ + #include + #include + #include +-#include + #include + #include + #include +diff --color -rupN a/src/Mod/MeshPart/Gui/CrossSections.cpp b/src/Mod/MeshPart/Gui/CrossSections.cpp +--- a/src/Mod/MeshPart/Gui/CrossSections.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/MeshPart/Gui/CrossSections.cpp 2024-02-27 15:00:48.252207183 +0100 +@@ -24,7 +24,6 @@ + #include "PreCompiled.h" + #ifndef _PreComp_ + # include +-# include + # include + # include + # include +diff --color -rupN a/src/Mod/Part/App/ImportStep.cpp b/src/Mod/Part/App/ImportStep.cpp +--- a/src/Mod/Part/App/ImportStep.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Part/App/ImportStep.cpp 2024-02-27 15:00:48.255540482 +0100 +@@ -167,7 +167,12 @@ int Part::ImportStepParts(App::Document + // This is a trick to access the GUI via Python and set the color property + // of the associated view provider. If no GUI is up an exception is thrown + // and cleared immediately ++#if OCC_VERSION_HEX >= 0x070800 ++ std::hash hasher; ++ std::map::iterator it = hash_col.find(hasher(aSolid)); ++#else + std::map::iterator it = hash_col.find(aSolid.HashCode(INT_MAX)); ++#endif + if (it != hash_col.end()) { + try { + Py::Object obj(pcFeature->getPyObject(), true); +diff --color -rupN a/src/Mod/Part/App/OCCError.h b/src/Mod/Part/App/OCCError.h +--- a/src/Mod/Part/App/OCCError.h 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Part/App/OCCError.h 2024-02-27 15:00:48.255540482 +0100 +@@ -50,7 +50,6 @@ + # include + # include + # include +-# include + # include + # include + +diff --color -rupN a/src/Mod/Part/App/OpenCascadeAll.h b/src/Mod/Part/App/OpenCascadeAll.h +--- a/src/Mod/Part/App/OpenCascadeAll.h 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Part/App/OpenCascadeAll.h 2024-02-27 15:00:48.255540482 +0100 +@@ -49,7 +49,6 @@ + #include + #include + #include +-#include + #include + #include + #include +diff --color -rupN a/src/Mod/Part/App/TopoShapePyImp.cpp b/src/Mod/Part/App/TopoShapePyImp.cpp +--- a/src/Mod/Part/App/TopoShapePyImp.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Part/App/TopoShapePyImp.cpp 2024-02-27 15:00:48.255540482 +0100 +@@ -1321,7 +1321,11 @@ PyObject* TopoShapePy::ancestorsOfType( + TopTools_ListIteratorOfListOfShape it(ancestors); + for (; it.More(); it.Next()) { + // make sure to avoid duplicates ++#if OCC_VERSION_HEX >= 0x070800 ++ const size_t code = std::hash{}(static_cast(it.Value())); ++#else + Standard_Integer code = it.Value().HashCode(INT_MAX); ++#endif + if (hashes.find(code) == hashes.end()) { + list.append(shape2pyshape(it.Value())); + hashes.insert(code); +@@ -1943,7 +1947,11 @@ PyObject* TopoShapePy::hashCode(PyObject + if (!PyArg_ParseTuple(args, "|i",&upper)) + return nullptr; + ++#if OCC_VERSION_HEX >= 0x070800 ++ int hc = std::hash{}(getTopoShapePtr()->getShape()); ++#else + int hc = getTopoShapePtr()->getShape().HashCode(upper); ++#endif + return Py_BuildValue("i", hc); + } + +diff --color -rupN a/src/Mod/Part/Gui/AppPartGui.cpp b/src/Mod/Part/Gui/AppPartGui.cpp +--- a/src/Mod/Part/Gui/AppPartGui.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Part/Gui/AppPartGui.cpp 2024-02-27 15:00:48.255540482 +0100 +@@ -11,9 +11,6 @@ + + + #include "PreCompiled.h" +-#ifndef _PreComp_ +-# include +-#endif + + #include + #include +diff --color -rupN a/src/Mod/Part/Gui/Command.cpp b/src/Mod/Part/Gui/Command.cpp +--- a/src/Mod/Part/Gui/Command.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Part/Gui/Command.cpp 2024-02-27 15:00:48.255540482 +0100 +@@ -26,7 +26,6 @@ + # include + # include + # include +-# include + # include + # include + # include +diff --color -rupN a/src/Mod/Part/Gui/CommandSimple.cpp b/src/Mod/Part/Gui/CommandSimple.cpp +--- a/src/Mod/Part/Gui/CommandSimple.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Part/Gui/CommandSimple.cpp 2024-02-27 15:00:48.255540482 +0100 +@@ -22,9 +22,6 @@ + + + #include "PreCompiled.h" +-#ifndef _PreComp_ +-# include +-#endif + + #include + #include +diff --color -rupN a/src/Mod/Part/Gui/CrossSections.cpp b/src/Mod/Part/Gui/CrossSections.cpp +--- a/src/Mod/Part/Gui/CrossSections.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Part/Gui/CrossSections.cpp 2024-02-27 15:00:48.255540482 +0100 +@@ -23,7 +23,6 @@ + + #include "PreCompiled.h" + #ifndef _PreComp_ +-# include + # include + # include + # include +diff --color -rupN a/src/Mod/Part/Gui/ViewProvider2DObject.cpp b/src/Mod/Part/Gui/ViewProvider2DObject.cpp +--- a/src/Mod/Part/Gui/ViewProvider2DObject.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Part/Gui/ViewProvider2DObject.cpp 2024-02-27 15:00:48.255540482 +0100 +@@ -26,8 +26,6 @@ + #ifndef _PreComp_ + # include + +-# include +- + # include + # include + # include +diff --color -rupN a/src/Mod/Part/Gui/ViewProviderExt.cpp b/src/Mod/Part/Gui/ViewProviderExt.cpp +--- a/src/Mod/Part/Gui/ViewProviderExt.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Part/Gui/ViewProviderExt.cpp 2024-02-27 15:00:48.255540482 +0100 +@@ -978,7 +978,11 @@ void ViewProviderPartExt::updateVisual() + + TopExp_Explorer xp; + for (xp.Init(faceMap(i),TopAbs_EDGE);xp.More();xp.Next()) ++#if OCC_VERSION_HEX >= 0x070800 ++ faceEdges.insert(std::hash{}(xp.Current())); ++#else + faceEdges.insert(xp.Current().HashCode(INT_MAX)); ++#endif + numFaces++; + } + +@@ -1006,7 +1010,11 @@ void ViewProviderPartExt::updateVisual() + // So, we have to store the hashes of the edges associated to a face. + // If the hash of a given edge is not in this list we know it's really + // a free edge. ++#if OCC_VERSION_HEX >= 0x070800 ++ int hash = std::hash{}(aEdge); ++#else + int hash = aEdge.HashCode(INT_MAX); ++#endif + if (faceEdges.find(hash) == faceEdges.end()) { + Handle(Poly_Polygon3D) aPoly = Part::Tools::polygonOfEdge(aEdge, aLoc); + if (!aPoly.IsNull()) { +@@ -1205,7 +1213,11 @@ void ViewProviderPartExt::updateVisual() + TopLoc_Location aLoc; + + // handling of the free edge that are not associated to a face ++#if OCC_VERSION_HEX >= 0x070800 ++ int hash = std::hash{}(aEdge); ++#else + int hash = aEdge.HashCode(INT_MAX); ++#endif + if (faceEdges.find(hash) == faceEdges.end()) { + Handle(Poly_Polygon3D) aPoly = Part::Tools::polygonOfEdge(aEdge, aLoc); + if (!aPoly.IsNull()) { +diff --color -rupN a/src/Mod/Part/Gui/ViewProviderExt.h b/src/Mod/Part/Gui/ViewProviderExt.h +--- a/src/Mod/Part/Gui/ViewProviderExt.h 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Part/Gui/ViewProviderExt.h 2024-02-27 15:00:48.255540482 +0100 +@@ -24,7 +24,6 @@ + #ifndef PARTGUI_VIEWPROVIDERPARTEXT_H + #define PARTGUI_VIEWPROVIDERPARTEXT_H + +-#include + #include + #include + #include +diff --color -rupN a/src/Mod/Part/Gui/ViewProviderMirror.cpp b/src/Mod/Part/Gui/ViewProviderMirror.cpp +--- a/src/Mod/Part/Gui/ViewProviderMirror.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Part/Gui/ViewProviderMirror.cpp 2024-02-27 15:00:48.255540482 +0100 +@@ -27,7 +27,6 @@ + # include + # include + # include +-# include + # include + # include + # include +diff --color -rupN a/src/Mod/Part/Gui/ViewProviderPython.cpp b/src/Mod/Part/Gui/ViewProviderPython.cpp +--- a/src/Mod/Part/Gui/ViewProviderPython.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Part/Gui/ViewProviderPython.cpp 2024-02-27 15:00:48.255540482 +0100 +@@ -23,7 +23,6 @@ + + #include "PreCompiled.h" + +-#include + #ifndef _PreComp_ + # include + #endif +diff --color -rupN a/src/Mod/Part/Gui/ViewProviderReference.h b/src/Mod/Part/Gui/ViewProviderReference.h +--- a/src/Mod/Part/Gui/ViewProviderReference.h 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Part/Gui/ViewProviderReference.h 2024-02-27 15:00:48.255540482 +0100 +@@ -24,7 +24,6 @@ + #ifndef PARTGUI_ViewProviderPartReference_H + #define PARTGUI_ViewProviderPartReference_H + +-#include + #include + #include + #include +diff --color -rupN a/src/Mod/PartDesign/Gui/PreCompiled.h b/src/Mod/PartDesign/Gui/PreCompiled.h +--- a/src/Mod/PartDesign/Gui/PreCompiled.h 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/PartDesign/Gui/PreCompiled.h 2024-02-27 15:00:48.255540482 +0100 +@@ -44,7 +44,6 @@ + #include + + // OCC +-#include + #include + #include + #include +diff --color -rupN a/src/Mod/Path/App/Voronoi.cpp b/src/Mod/Path/App/Voronoi.cpp +--- a/src/Mod/Path/App/Voronoi.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Path/App/Voronoi.cpp 2024-02-27 15:00:48.255540482 +0100 +@@ -23,10 +23,6 @@ + + #include "PreCompiled.h" + +-#ifndef _PreComp_ +-# include +-#endif +- + #include + + #include "Voronoi.h" +diff --color -rupN a/src/Mod/Path/Gui/PreCompiled.h b/src/Mod/Path/Gui/PreCompiled.h +--- a/src/Mod/Path/Gui/PreCompiled.h 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Path/Gui/PreCompiled.h 2024-02-27 15:00:48.258873781 +0100 +@@ -38,8 +38,6 @@ + # define PathGuiExport + #endif + +-#include +- + #ifdef _MSC_VER + # pragma warning( disable : 4273 ) + #endif +diff --color -rupN a/src/Mod/Robot/Gui/PreCompiled.h b/src/Mod/Robot/Gui/PreCompiled.h +--- a/src/Mod/Robot/Gui/PreCompiled.h 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Robot/Gui/PreCompiled.h 2024-02-27 15:00:48.258873781 +0100 +@@ -39,8 +39,6 @@ + # define RobotGuiExport + #endif + +-#include +- + #ifdef _MSC_VER + # pragma warning(disable : 4005) + # pragma warning(disable : 4273) +diff --color -rupN a/src/Mod/Sandbox/Gui/AppSandboxGui.cpp b/src/Mod/Sandbox/Gui/AppSandboxGui.cpp +--- a/src/Mod/Sandbox/Gui/AppSandboxGui.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Sandbox/Gui/AppSandboxGui.cpp 2024-02-27 15:00:48.258873781 +0100 +@@ -24,7 +24,6 @@ + #include "PreCompiled.h" + #ifndef _PreComp_ + # include +-# include + # include + # include + # include +diff --color -rupN a/src/Mod/Sketcher/App/SketchAnalysis.cpp b/src/Mod/Sketcher/App/SketchAnalysis.cpp +--- a/src/Mod/Sketcher/App/SketchAnalysis.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Sketcher/App/SketchAnalysis.cpp 2024-02-27 15:00:48.258873781 +0100 +@@ -25,7 +25,6 @@ + #include "PreCompiled.h" + + #ifndef _PreComp_ +-# include + # include + # include + # include +diff --color -rupN a/src/Mod/Sketcher/Gui/DrawSketchHandler.cpp b/src/Mod/Sketcher/Gui/DrawSketchHandler.cpp +--- a/src/Mod/Sketcher/Gui/DrawSketchHandler.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Sketcher/Gui/DrawSketchHandler.cpp 2024-02-27 15:00:48.258873781 +0100 +@@ -24,7 +24,6 @@ + #include "PreCompiled.h" + + #ifndef _PreComp_ +-# include + # include + # include + # include +diff --color -rupN a/src/Mod/Sketcher/Gui/EditDatumDialog.cpp b/src/Mod/Sketcher/Gui/EditDatumDialog.cpp +--- a/src/Mod/Sketcher/Gui/EditDatumDialog.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Sketcher/Gui/EditDatumDialog.cpp 2024-02-27 15:00:48.258873781 +0100 +@@ -23,7 +23,6 @@ + #include "PreCompiled.h" + + #ifndef _PreComp_ +-# include + /// Qt Include Files + # include + # include +diff --color -rupN a/src/Mod/Sketcher/Gui/TaskSketcherValidation.cpp b/src/Mod/Sketcher/Gui/TaskSketcherValidation.cpp +--- a/src/Mod/Sketcher/Gui/TaskSketcherValidation.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Sketcher/Gui/TaskSketcherValidation.cpp 2024-02-27 15:00:48.258873781 +0100 +@@ -24,7 +24,6 @@ + #include "PreCompiled.h" + + #ifndef _PreComp_ +-# include + # include + # include + # include +diff --color -rupN a/src/Mod/Sketcher/Gui/ViewProviderPython.cpp b/src/Mod/Sketcher/Gui/ViewProviderPython.cpp +--- a/src/Mod/Sketcher/Gui/ViewProviderPython.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Sketcher/Gui/ViewProviderPython.cpp 2024-02-27 15:00:48.258873781 +0100 +@@ -23,7 +23,6 @@ + + #include "PreCompiled.h" + +-#include + #ifndef _PreComp_ + # include + #endif +diff --color -rupN a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +--- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp 2024-02-27 15:00:48.258873781 +0100 +@@ -24,7 +24,6 @@ + #include "PreCompiled.h" + + #ifndef _PreComp_ +-# include + + # include + # include +diff --color -rupN a/src/Mod/Surface/Gui/Command.cpp b/src/Mod/Surface/Gui/Command.cpp +--- a/src/Mod/Surface/Gui/Command.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Surface/Gui/Command.cpp 2024-02-27 15:00:48.258873781 +0100 +@@ -31,7 +31,6 @@ + #include + #include + #include +-#include + #include + #include + #include +diff --color -rupN a/src/Mod/TechDraw/Gui/TaskProjection.cpp b/src/Mod/TechDraw/Gui/TaskProjection.cpp +--- a/src/Mod/TechDraw/Gui/TaskProjection.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/TechDraw/Gui/TaskProjection.cpp 2024-02-27 15:00:48.258873781 +0100 +@@ -29,9 +29,6 @@ + # include + #endif + +- +-#include +- + #include + #include + #include diff --git a/backports/freecad/resourceDirectory.patch b/backports/freecad/resourceDirectory.patch new file mode 100644 index 0000000..a2a16d1 --- /dev/null +++ b/backports/freecad/resourceDirectory.patch @@ -0,0 +1,11 @@ +--- ./cMake/FreeCAD_Helpers/ConfigureCMakeVariables.cmake.orig ++++ ./cMake/FreeCAD_Helpers/ConfigureCMakeVariables.cmake +@@ -23,7 +23,7 @@ + "Path to the directory containing PyCXX's cxxextensions.c source file") + + # used as compiler defines +- set(RESOURCEDIR "${CMAKE_INSTALL_DATADIR}") ++ set(RESOURCEDIR "../../share/freecad") + set(LIBRARYDIR "${CMAKE_INSTALL_LIBDIR}") + set(DOCDIR "${CMAKE_INSTALL_DOCDIR}") + diff --git a/backports/freecad/tests.patch b/backports/freecad/tests.patch new file mode 100644 index 0000000..4b63a20 --- /dev/null +++ b/backports/freecad/tests.patch @@ -0,0 +1,33 @@ +--- ./src/Mod/Mesh/App/MeshTestsApp.py.orig ++++ ./src/Mod/Mesh/App/MeshTestsApp.py +@@ -423,30 +423,6 @@ + self.planarMesh = [] + FreeCAD.newDocument("MeshTest") + +- def testRayPick(self): +- if not FreeCAD.GuiUp: +- return +- self.planarMesh.append( [-16.097176,-29.891157,15.987688] ) +- self.planarMesh.append( [-16.176304,-29.859991,15.947966] ) +- self.planarMesh.append( [-16.071451,-29.900553,15.912505] ) +- self.planarMesh.append( [-16.092241,-29.893408,16.020439] ) +- self.planarMesh.append( [-16.007210,-29.926180,15.967641] ) +- self.planarMesh.append( [-16.064457,-29.904951,16.090832] ) +- planarMeshObject = Mesh.Mesh(self.planarMesh) +- +- from pivy import coin; import FreeCADGui +- Mesh.show(planarMeshObject) +- view=FreeCADGui.ActiveDocument.ActiveView.getViewer() +- rp=coin.SoRayPickAction(view.getSoRenderManager().getViewportRegion()) +- rp.setRay(coin.SbVec3f(-16.05,16.0,16.0),coin.SbVec3f(0,-1,0)) +- rp.apply(view.getSoRenderManager().getSceneGraph()) +- pp=rp.getPickedPoint() +- self.assertTrue(pp != None) +- det=pp.getDetail() +- self.assertTrue(det.getTypeId() == coin.SoFaceDetail.getClassTypeId()) +- det=coin.cast(det, det.getTypeId().getName().getString()) +- self.assertTrue(det.getFaceIndex() == 1) +- + def testPrimitiveCount(self): + if not FreeCAD.GuiUp: + return diff --git a/backports/freetube/APKBUILD b/backports/freetube/APKBUILD index 3ab6bf8..ecd6add 100644 --- a/backports/freetube/APKBUILD +++ b/backports/freetube/APKBUILD @@ -1,8 +1,8 @@ -# Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) pkgname=freetube -pkgver=0.23.12 -pkgrel=1 +pkgver=0.21.3 +pkgrel=0 pkgdesc="An open source desktop YouTube player built with privacy in mind." arch="x86_64 aarch64" # blocked by electron license="AGPL-3.0-only" @@ -50,7 +50,7 @@ package() { } sha512sums=" -e19c7e8de0c6c5bbddcd3da73cd1907cae7157e8f44f550c4a34965b3b4f3c1a180c111a8c497d74a556d6d8e74e9fdd1ed6e064d4fc899f80712a1f187395ae freetube-0.23.12.tar.gz +22e5ab677cd442d50237b2d62534698d8ad73a37e1731003dc23c4ea3da992b3cae936f0bb3a0a86cd4b7fba731c9fa53276cb0a6cd5bab213ff2a6c9006cb05 freetube-0.21.3.tar.gz 2ce2effc794bb663789cefe968b5899122127983dbfa1b240aa33a2be383720b18204e6d01b4a550df72956f02b6636b79c93a58f470a970b09b770f5b8f2fc4 freetube.sh d27cb896b65a7e8d52ffe86e5f74eed72b6cf976b28e1a13012d34c7eceba5ff6f20298017738dfa93c0336ffa52b8ee4da7e06b02747062898db7e678819526 tasje-dotdash.patch " diff --git a/backports/libmedc/APKBUILD b/backports/libmedc/APKBUILD new file mode 100644 index 0000000..ffc22e4 --- /dev/null +++ b/backports/libmedc/APKBUILD @@ -0,0 +1,43 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +pkgname=libmedc +pkgver=4.1.1 +pkgrel=3 +pkgdesc="Open source library for numerical simulation" +url="https://www.salome-platform.org/" +arch="all" +license="GPL-3.0-or-later" +makedepends="cmake hdf5-dev swig python3-dev samurai" +options="!check" #test suite is nonfunctional with python bindings +subpackages="$pkgname-dev $pkgname-doc $pkgname-python-pyc $pkgname-python:_py" +source=" + https://files.salome-platform.org/Salome/medfile/med-$pkgver.tar.gz + hdf5.patch + cmake-config-dir.patch + " +builddir="$srcdir/med-$pkgver" + +build() { + cmake -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=None \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DMEDFILE_BUILD_TESTS=OFF \ + -DMEDFILE_BUILD_PYTHON=ON + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} + +_py() { + pkgdesc="Python bindings for libmedc" + depends="python3" + amove usr/lib/python3* +} + +sha512sums=" +f211fa82750a7cc935baa3a50a55d16e40117a0f2254b482492ba8396d82781ca84960995da7a16b2b5be0b93ce76368bf4b311bb8af0e5f0243e7051c9c554c med-4.1.1.tar.gz +68d9291e73a68d674081314028c0fce7bbd4a7b78b93b7e5078117ce62f2d07318bc33ec95091ce677148ec3926c1ce653d0760c34e74b29257a7be59210f040 hdf5.patch +8d0f58cd67d205fbacaff0e6da76e2ee5473457b478ede13a551ebe5853c0716c7406b74c3792e1ace33a34d352fccca8dd2940f063a7c060a12529d060a991a cmake-config-dir.patch +" diff --git a/backports/libmedc/cmake-config-dir.patch b/backports/libmedc/cmake-config-dir.patch new file mode 100644 index 0000000..e1f43a4 --- /dev/null +++ b/backports/libmedc/cmake-config-dir.patch @@ -0,0 +1,11 @@ +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -101,7 +101,7 @@ + IF(WIN32 AND NOT CYGWIN) + SET(INSTALL_CMAKE_CONFIG_DIR cmake) + ELSE() +- SET(INSTALL_CMAKE_CONFIG_DIR share/cmake/medfile-${MED_STR_VERSION}) ++ SET(INSTALL_CMAKE_CONFIG_DIR lib${LIB_SUFFIX}/cmake/medfile-${MED_STR_VERSION}) + ENDIF() + SET(INSTALL_INCLUDE_DIR include) + diff --git a/backports/libmedc/hdf5.patch b/backports/libmedc/hdf5.patch new file mode 100644 index 0000000..bc4764b --- /dev/null +++ b/backports/libmedc/hdf5.patch @@ -0,0 +1,94 @@ +Originally from https://gist.github.com/jedbrown/527ef81ff59a0dccf833da40fdd15a47 +diff -rupN med-4.1.0/config/cmake_files/medMacros.cmake med-4.1.0-new/config/cmake_files/medMacros.cmake +--- med-4.1.0/config/cmake_files/medMacros.cmake 2021-12-03 09:35:30.675827163 +0100 ++++ med-4.1.0-new/config/cmake_files/medMacros.cmake 2021-12-03 09:32:31.894994147 +0100 +@@ -447,7 +447,7 @@ MACRO(MED_FIND_HDF5) + ## + ## Requires 1.10.x version + ## +- IF (NOT HDF_VERSION_MAJOR_REF EQUAL 1 OR NOT HDF_VERSION_MINOR_REF EQUAL 10 OR NOT HDF_VERSION_RELEASE_REF GREATER 1) ++ IF (HDF5_VERSION VERSION_LESS 1.10.2) + MESSAGE(FATAL_ERROR "HDF5 version is ${HDF_VERSION_REF}. Only versions >= 1.10.2 are supported.") + ENDIF() + ## +diff -rupN med-4.1.0/src/ci/MEDfileCompatibility.c med-4.1.0-new/src/ci/MEDfileCompatibility.c +--- med-4.1.0/src/ci/MEDfileCompatibility.c 2021-12-03 09:35:30.676827162 +0100 ++++ med-4.1.0-new/src/ci/MEDfileCompatibility.c 2021-12-03 09:33:26.292942149 +0100 +@@ -71,7 +71,7 @@ MEDfileCompatibility(const char* const f + _hversionMMR=10000*_hmajeur+100*_hmineur+_hrelease; + /* ISCRUTE(_hversionMMR); */ + /* ISCRUTE(HDF_VERSION_NUM_REF); */ +- if ( (_hversionMMR >= HDF_VERSION_NUM_REF) && (_hmineur == HDF_VERSION_MINOR_REF) ) *hdfok = MED_TRUE; ++ if (_hversionMMR >= HDF_VERSION_NUM_REF) *hdfok = MED_TRUE; + + /* TODO : Vérifier si la version mineure HDF du fichier est supérieure + à la version mineure de la bibliothèque HDF utilisée : +@@ -113,7 +113,7 @@ MEDfileCompatibility(const char* const f + #if MED_NUM_MAJEUR != 4 + #error "Don't forget to update the test version here when you change the major version of the library !" + #endif +-#if H5_VERS_MINOR > 10 ++#if H5_VERS_MINOR > 14 + #error "Don't forget to check the compatibility version of the library, depending on the internal hdf model choice !" + #error "Cf. _MEDfileCreate ..." + #endif +diff -rupN med-4.1.0/src/hdfi/_MEDfileCreate.c med-4.1.0-new/src/hdfi/_MEDfileCreate.c +--- med-4.1.0/src/hdfi/_MEDfileCreate.c 2021-12-03 09:35:30.677827161 +0100 ++++ med-4.1.0-new/src/hdfi/_MEDfileCreate.c 2021-12-03 09:32:31.894994147 +0100 +@@ -159,7 +159,7 @@ med_idt _MEDfileCreate(const char * cons + * En HDF5-1.10.0p1 cela n'a aucun effet ! + * Un test autoconf permet de fixer un intervalle de version HDF à MED. + */ +-#if H5_VERS_MINOR > 10 ++#if H5_VERS_MINOR > 14 + #error "Don't forget to change the compatibility version of the library !" + #endif + +diff -rupN med-4.1.0/src/hdfi/_MEDfileOpen.c med-4.1.0-new/src/hdfi/_MEDfileOpen.c +--- med-4.1.0/src/hdfi/_MEDfileOpen.c 2021-12-03 09:35:30.677827161 +0100 ++++ med-4.1.0-new/src/hdfi/_MEDfileOpen.c 2021-12-03 09:32:31.894994147 +0100 +@@ -72,7 +72,7 @@ med_idt _MEDfileOpen(const char * const + + • The creation order tracking property, H5P_CRT_ORDER_TRACKED, has been set in the group creation property list (see H5Pset_link_creation_order). + */ +-#if H5_VERS_MINOR > 10 ++#if H5_VERS_MINOR > 14 + #error "Don't forget to change the compatibility version of the library !" + #endif + /* L'avantage de bloquer le modèle interne HDF5 +diff -rupN med-4.1.0/src/hdfi/_MEDmemFileOpen.c med-4.1.0-new/src/hdfi/_MEDmemFileOpen.c +--- med-4.1.0/src/hdfi/_MEDmemFileOpen.c 2021-12-03 09:35:30.678827160 +0100 ++++ med-4.1.0-new/src/hdfi/_MEDmemFileOpen.c 2021-12-03 09:32:31.894994147 +0100 +@@ -434,7 +434,7 @@ med_idt _MEDmemFileOpen(const char * con + goto ERROR; + } + +-#if H5_VERS_MINOR > 10 ++#if H5_VERS_MINOR > 14 + #error "Don't forget to change the compatibility version of the library !" + #endif + if ( H5Pset_libver_bounds( _fapl, H5F_LIBVER_18, H5F_LIBVER_18) ) { +diff -rupN med-4.1.0/src/hdfi/_MEDparFileCreate.c med-4.1.0-new/src/hdfi/_MEDparFileCreate.c +--- med-4.1.0/src/hdfi/_MEDparFileCreate.c 2021-12-03 09:35:30.678827160 +0100 ++++ med-4.1.0-new/src/hdfi/_MEDparFileCreate.c 2021-12-03 09:32:31.894994147 +0100 +@@ -64,7 +64,7 @@ med_idt _MEDparFileCreate(const char * c + * En HDF5-1.10.0p1 cela n'a aucun effet ! + * Un test autoconf permet de fixer un intervalle de version HDF à MED. + */ +-#if H5_VERS_MINOR > 10 ++#if H5_VERS_MINOR > 14 + #error "Don't forget to change the compatibility version of the library !" + #endif + +diff -rupN med-4.1.0/src/hdfi/_MEDparFileOpen.c med-4.1.0-new/src/hdfi/_MEDparFileOpen.c +--- med-4.1.0/src/hdfi/_MEDparFileOpen.c 2021-12-03 09:35:30.679827159 +0100 ++++ med-4.1.0-new/src/hdfi/_MEDparFileOpen.c 2021-12-03 09:32:31.894994147 +0100 +@@ -55,7 +55,7 @@ med_idt _MEDparFileOpen(const char * con + MED_ERR_(_fid,MED_ERR_INIT,MED_ERR_PROPERTY,MED_ERR_PARALLEL_MSG); + goto ERROR; + } +-#if H5_VERS_MINOR > 10 ++#if H5_VERS_MINOR > 14 + #error "Don't forget to change the compatibility version of the library !" + #endif + if ( H5Pset_libver_bounds( _fapl, H5F_LIBVER_18, H5F_LIBVER_18 ) ) { diff --git a/backports/libnest2d/APKBUILD b/backports/libnest2d/APKBUILD new file mode 100644 index 0000000..bc8059b --- /dev/null +++ b/backports/libnest2d/APKBUILD @@ -0,0 +1,40 @@ +# Contributor: Anjandev Momi +# Maintainer: Anjandev Momi +pkgname=libnest2d +pkgver=0.4 +pkgrel=6 +pkgdesc="2D irregular bin packaging and nesting library written in modern C++" +url="https://github.com/tamasmeszaros/libnest2d" +arch="noarch" +license="LGPL-3.0-only" +makedepends="samurai cmake clipper-dev boost-dev nlopt-dev" +subpackages="$pkgname-dev" +source="$pkgname-$pkgver.tar.gz::https://github.com/tamasmeszaros/libnest2d/archive/refs/tags/$pkgver.tar.gz + allow-disallowed-area.patch" + +build() { + if [ "$CBUILD" != "$CHOST" ]; then + CMAKE_CROSSOPTS="-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_HOST_SYSTEM_NAME=Linux" + fi + cmake -B build -G Ninja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DBUILD_SHARED_LIBS=True \ + -DCMAKE_BUILD_TYPE=minsizerel \ + $CMAKE_CROSSOPTS . + cmake --build build +} + +check() { + cd build + CTEST_OUTPUT_ON_FAILURE=TRUE ctest +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} + +sha512sums=" +fadce18986b844eed13a581f84055df909a17407a0980deb6c7c24248a969a537a8840650bcfc673e61973810ce9a008acb599e3b8e00c9bff6b566ca41cd62c libnest2d-0.4.tar.gz +2e8cd3343c72c576ecb54960d7ad9f4f2322f822b19ac41850b3b28da95e97c2cefe7c67de6c97627df08cd5cdc1660ce4dfa95fe51f88e0ff5c066c8d785458 allow-disallowed-area.patch +" diff --git a/backports/libnest2d/allow-disallowed-area.patch b/backports/libnest2d/allow-disallowed-area.patch new file mode 100644 index 0000000..479b9c4 --- /dev/null +++ b/backports/libnest2d/allow-disallowed-area.patch @@ -0,0 +1,124 @@ +From 2e91be2679b5efa0773292d9d0a2ae72255bb271 Mon Sep 17 00:00:00 2001 +From: Ghostkeeper +Date: Tue, 6 Oct 2020 16:13:15 +0200 +Subject: [PATCH 1/3] Allow for an item to be a disallowed area + +url: https://github.com/tamasmeszaros/libnest2d/pull/18 + +Disallowed areas have slightly different behaviour from fixed items: Other items won't get packed closely around them. Implementation of that pending. + +Contributes to issue CURA-7754. +--- + include/libnest2d/nester.hpp | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git a/include/libnest2d/nester.hpp b/include/libnest2d/nester.hpp +index 2f207d5..932a060 100644 +--- a/include/libnest2d/nester.hpp ++++ b/include/libnest2d/nester.hpp +@@ -71,6 +71,15 @@ class _Item { + int binid_{BIN_ID_UNSET}, priority_{0}; + bool fixed_{false}; + ++ /** ++ * \brief If this is a fixed area, indicates whether it is a disallowed area ++ * or a previously placed item. ++ * ++ * If this is a disallowed area, other objects will not get packed close ++ * together with this item. It only blocks other items in its area. ++ */ ++ bool disallowed_{false}; ++ + public: + + /// The type of the shape which was handed over as the template argument. +@@ -129,11 +138,18 @@ class _Item { + sh_(sl::create(std::move(contour), std::move(holes))) {} + + inline bool isFixed() const noexcept { return fixed_; } ++ inline bool isDisallowedArea() const noexcept { return disallowed_; } + inline void markAsFixedInBin(int binid) + { + fixed_ = binid >= 0; + binid_ = binid; + } ++ inline void markAsDisallowedAreaInBin(int binid) ++ { ++ fixed_ = binid >= 0; ++ binid_ = binid; ++ disallowed_ = true; ++ } + + inline void binId(int idx) { binid_ = idx; } + inline int binId() const noexcept { return binid_; } + +From ff61049e59d3151462bca7ff2e2268c2b32731e7 Mon Sep 17 00:00:00 2001 +From: Ghostkeeper +Date: Tue, 6 Oct 2020 16:14:36 +0200 +Subject: [PATCH 2/3] Allow unsetting of being a disallowed area + +If you set the bin to -1 or set the item to be a simple fixed item afterwards, it'll no longer be a disallowed area. + +Contributes to issue CURA-7754. +--- + include/libnest2d/nester.hpp | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/include/libnest2d/nester.hpp b/include/libnest2d/nester.hpp +index 932a060..54761a6 100644 +--- a/include/libnest2d/nester.hpp ++++ b/include/libnest2d/nester.hpp +@@ -143,12 +143,13 @@ class _Item { + { + fixed_ = binid >= 0; + binid_ = binid; ++ disallowed_ = false; + } + inline void markAsDisallowedAreaInBin(int binid) + { + fixed_ = binid >= 0; + binid_ = binid; +- disallowed_ = true; ++ disallowed_ = fixed_; + } + + inline void binId(int idx) { binid_ = idx; } + +From 31391fd173249ad9b906390058e13b09238fadc8 Mon Sep 17 00:00:00 2001 +From: Ghostkeeper +Date: Thu, 8 Oct 2020 11:06:58 +0200 +Subject: [PATCH 3/3] Align items to their starting position if all placed + items are disallowed + +We shouldn't align items to disallowed areas. So place them in the starting position according to the alignment property. + +Lot of work to investigate. But very little code changes! + +Contributes to issue CURA-7754. +--- + include/libnest2d/placers/nfpplacer.hpp | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/include/libnest2d/placers/nfpplacer.hpp b/include/libnest2d/placers/nfpplacer.hpp +index 96a8cff..b0ebb15 100644 +--- a/include/libnest2d/placers/nfpplacer.hpp ++++ b/include/libnest2d/placers/nfpplacer.hpp +@@ -101,7 +101,7 @@ struct NfpPConfig { + * alignment with the candidate item or do anything else. + * + * \param remaining A container with the remaining items waiting to be +- * placed. You can use some features about the remaining items to alter to ++ * placed. You can use some features about the remaining items to alter the + * score of the current placement. If you know that you have to leave place + * for other items as well, that might influence your decision about where + * the current candidate should be placed. E.g. imagine three big circles +@@ -735,7 +735,8 @@ class _NofitPolyPlacer: public PlacerBoilerplate<_NofitPolyPlacer +# Maintainer: Alex Yam +pkgname=libspatialindex +pkgver=0_git20210205 +_commit=8ee223632f95c81f49f5eb2d547ad973475c4601 +pkgrel=1 +pkgdesc="extensible framework for robust spatial indexing methods" +url="https://libspatialindex.org/" +arch="all" +license="MIT" +makedepends="cmake" +subpackages="$pkgname-dev" +source="$pkgname-$_commit.tar.gz::https://github.com/libspatialindex/libspatialindex/archive/$_commit.tar.gz" +builddir="$srcdir/$pkgname-$_commit" + +build() { + cmake -B build \ + -DCMAKE_BUILD_TYPE=MinSizeRel \ + -DCMAKE_PREFIX_PATH=/usr \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_TESTING=ON + cmake --build build +} + +check() { + cd build && ctest +} + +package() { + DESTDIR="$pkgdir" cmake --build build --target install +} + +sha512sums="caf91aac77b75445e4fc4d0baedcd10c619b2097dfd841b00339d9ddd4b73db05b99de1d84be88f1083f4713a936cf110d5851523491f5a74c6f96e1d5795dbb libspatialindex-8ee223632f95c81f49f5eb2d547ad973475c4601.tar.gz" diff --git a/backports/looking-glass/APKBUILD b/backports/looking-glass/APKBUILD new file mode 100644 index 0000000..fc66935 --- /dev/null +++ b/backports/looking-glass/APKBUILD @@ -0,0 +1,93 @@ +# Contributor: Rogério da Silva Yokomizo +# Contributor: Antoine Martin (ayakael) +# Maintainer: Rogério da Silva Yokomizo +pkgname=looking-glass +_gittag=b7_git20240607 +pkgver=7b_git20240607 +pkgrel=0 +pkgdesc="Allows the use of a KVM configured for VGA PCI Pass-through without an attached physical monitor, keyboard or mouse" +url="https://looking-glass.io/" +arch="x86_64" +license="GPL-2.0-or-later" +makedepends=" + cmake + fontconfig-dev + libsamplerate-dev + libx11-dev + libxcursor-dev + libxfixes-dev + libxi-dev + libxinerama-dev + libxkbcommon-dev + libxpresent-dev + libxscrnsaver-dev + nettle-dev + obs-studio-dev + pipewire-dev + pulseaudio-dev + samurai + spice-dev + wayland-dev + wayland-protocols + " +source="$pkgname-$_gittag.tar.gz::https://lab.ilot.io/mirrors/looking-glass/-/releases/$_gittag/downloads/tarball/looking-glass-$_gittag.tar.gz + missing-includes.patch + obs-plugins-lib.patch + werror.patch + " +subpackages="$pkgname-obs $pkgname-module" +builddir="$srcdir/$pkgname-$_gittag" +options="!check" # There are no tests nor --version. + +build() { + cmake -S client -B build-client -G Ninja \ + -DENABLE_BACKTRACE=OFF \ + -DOPTIMIZE_FOR_NATIVE=OFF \ + -DCMAKE_INSTALL_PREFIX=/usr + + cmake -S obs -B build-obs -G Ninja \ + -DENABLE_BACKTRACE=OFF \ + -DOPTIMIZE_FOR_NATIVE=OFF \ + -DCMAKE_INSTALL_PREFIX=/usr + + cmake --build build-client + cmake --build build-obs +} + +package() { + DESTDIR="$pkgdir" cmake --install build-client + DESTDIR="$pkgdir" cmake --install build-obs +} + +module() { + pkgdesc="Looking Glass kernel module (AKMS)" + depends="akms" + install_if="looking-glass=$pkgver-r$pkgrel" + _modver=$(awk -F "=" '{if($1=="PACKAGE_VERSION"){print $2}}' src/looking-glass-B6/module/dkms.conf | tr -d '"') + + install -Dm644 "$builddir"/module/Makefile "$subpkgdir"/usr/src/looking-glass/Makefile + install -Dm644 "$builddir"/module/kvmfr* "$subpkgdir"/usr/src/looking-glass/. + + cat ->> "$subpkgdir"/usr/src/looking-glass/AKMBUILD < "$subpkgdir"/etc/udev/rules.d/99-kvmfr.rules + +} + +obs() { + pkgdesc="$pkgdesc (obs plugin)" + amove usr/lib/obs-plugins +} + +sha512sums=" +959f49c91dc7bb06dfae890547bfbd1c02bd4154f4ba1c898a12d15a3579658d65fcb9fc4b951c04180e17fc9151e551858e0fb60f20e3f1a72d19b86c7dc3db looking-glass-b7_git20240607.tar.gz +6d2449764a8316dd3c1b5cc0aa552671068f89ed2f95297f3c5256af8529b93e5ec7af8f979bd2e744fd09b11063e8a93f3ed26284f0e49294e467ca10f6e772 missing-includes.patch +33c5463412a16691f47d7833ebf81d7cf20c560a077dca141dcc9f02a5d6dfb676e483835f39a06012b114be9f509dda4614fe253bb1c72a0142e82dc265a5ca obs-plugins-lib.patch +b952d1fd284aed15bcfe7990f160dec3a4565fb5833ce339920f62de6bb46fbc09265a0a79fe80d212eecc6a1813614e1e193a8846c37e2afd18431dc3a89ca4 werror.patch +" diff --git a/backports/looking-glass/looking-glass.post-deinstall b/backports/looking-glass/looking-glass.post-deinstall new file mode 100644 index 0000000..f193065 --- /dev/null +++ b/backports/looking-glass/looking-glass.post-deinstall @@ -0,0 +1,2 @@ +#!/bin/sh +exec /usr/sbin/akms uninstall kvmfr diff --git a/backports/looking-glass/missing-includes.patch b/backports/looking-glass/missing-includes.patch new file mode 100644 index 0000000..635752c --- /dev/null +++ b/backports/looking-glass/missing-includes.patch @@ -0,0 +1,92 @@ +--- a/repos/PureSpice/src/agent.c ++++ b/repos/PureSpice/src/agent.c +@@ -31,6 +31,7 @@ Place, Suite 330, Boston, MA 02111-1307 + #include + #include + #include ++#include + #include + + #include +--- a/repos/PureSpice/src/channel_cursor.c ++++ b/repos/PureSpice/src/channel_cursor.c +@@ -25,6 +25,7 @@ Place, Suite 330, Boston, MA 02111-1307 + #include "channel_cursor.h" + + #include ++#include + + #include "messages.h" + +--- a/repos/PureSpice/src/channel_display.c ++++ b/repos/PureSpice/src/channel_display.c +@@ -19,6 +19,7 @@ Place, Suite 330, Boston, MA 02111-1307 + + #include "purespice.h" + #include ++#include + + #include "ps.h" + #include "log.h" +--- a/repos/PureSpice/src/channel_inputs.c ++++ b/repos/PureSpice/src/channel_inputs.c +@@ -25,6 +25,7 @@ Place, Suite 330, Boston, MA 02111-1307 + #include "messages.h" + + #include ++#include + + const SpiceLinkHeader * channelInputs_getConnectPacket(void) + { +--- a/repos/PureSpice/src/channel_main.c ++++ b/repos/PureSpice/src/channel_main.c +@@ -24,6 +24,7 @@ Place, Suite 330, Boston, MA 02111-1307 + #include "messages.h" + + #include ++#include + + struct ChannelMain + { +--- a/repos/PureSpice/src/channel_playback.c ++++ b/repos/PureSpice/src/channel_playback.c +@@ -26,6 +26,8 @@ Place, Suite 330, Boston, MA 02111-1307 + + #include "messages.h" + ++#include ++ + const SpiceLinkHeader * channelPlayback_getConnectPacket(void) + { + typedef struct +--- a/repos/PureSpice/src/channel_record.c ++++ b/repos/PureSpice/src/channel_record.c +@@ -26,6 +26,8 @@ Place, Suite 330, Boston, MA 02111-1307 + + #include "messages.h" + ++#include ++ + const SpiceLinkHeader * channelRecord_getConnectPacket(void) + { + typedef struct +--- a/repos/PureSpice/src/log.c ++++ b/repos/PureSpice/src/log.c +@@ -25,6 +25,7 @@ Place, Suite 330, Boston, MA 02111-1307 + + #include + #include ++#include + + static void log_stdout(const char * file, unsigned int line, + const char * function, const char * format, ...) +--- a/repos/PureSpice/src/ps.c ++++ b/repos/PureSpice/src/ps.c +@@ -37,6 +37,7 @@ Place, Suite 330, Boston, MA 02111-1307 + #include + #include + #include ++#include + #include + #include + diff --git a/backports/looking-glass/module_1075-fix-build-linux64.patch b/backports/looking-glass/module_1075-fix-build-linux64.patch new file mode 100644 index 0000000..bf594b5 --- /dev/null +++ b/backports/looking-glass/module_1075-fix-build-linux64.patch @@ -0,0 +1,25 @@ +From e32b292cc1ba089db6ed28e4d5eb0fc8cc4c2235 Mon Sep 17 00:00:00 2001 +From: esi +Date: Fri, 12 May 2023 16:28:01 -0400 +Subject: [PATCH] [module] Fix build on Linux 6.4 (fixes #1075) + +--- + module/dkms.conf | 2 +- + module/kvmfr.c | 4 ++++ + 2 files changed, 5 insertions(+), 1 deletion(-) + +diff --git a/module/kvmfr.c b/module/kvmfr.c +index ca0cca685..c711e000e 100644 +--- a/module/kvmfr.c ++++ b/module/kvmfr.c +@@ -539,7 +539,11 @@ static int __init kvmfr_module_init(void) + if (kvmfr->major < 0) + goto out_free; + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 4, 0) + kvmfr->pClass = class_create(THIS_MODULE, KVMFR_DEV_NAME); ++#else ++ kvmfr->pClass = class_create(KVMFR_DEV_NAME); ++#endif + if (IS_ERR(kvmfr->pClass)) + goto out_unreg; diff --git a/backports/looking-glass/module_1124-fix-build-linux610.patch b/backports/looking-glass/module_1124-fix-build-linux610.patch new file mode 100644 index 0000000..c194c78 --- /dev/null +++ b/backports/looking-glass/module_1124-fix-build-linux610.patch @@ -0,0 +1,23 @@ +From 7305ce36af211220419eeab302ff28793d515df2 Mon Sep 17 00:00:00 2001 +From: Geoffrey McRae +Date: Fri, 7 Jun 2024 19:01:38 +1000 +Subject: [PATCH] [module] fix build on linux 6.10 + +Fixes #1124 - Thanks @pongo1231 +--- + module/dkms.conf | 2 +- + module/kvmfr.c | 1 + + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/module/kvmfr.c b/module/kvmfr.c +index b5acd18de..c99a5d79c 100644 +--- a/module/kvmfr.c ++++ b/module/kvmfr.c +@@ -30,6 +30,7 @@ + #include + #include + #include ++#include + + #include + diff --git a/backports/looking-glass/obs-plugins-lib.patch b/backports/looking-glass/obs-plugins-lib.patch new file mode 100644 index 0000000..1390adb --- /dev/null +++ b/backports/looking-glass/obs-plugins-lib.patch @@ -0,0 +1,12 @@ +--- a/obs/CMakeLists.txt ++++ b/obs/CMakeLists.txt +@@ -84,7 +84,8 @@ target_link_libraries(looking-glass-obs + ) + + install(TARGETS looking-glass-obs +- LIBRARY DESTINATION ${OBS_PLUGIN_PREFIX}/${CMAKE_PROJECT_NAME}/bin/${OBS_PLUGIN_DIR} ++ # LIBRARY DESTINATION ${OBS_PLUGIN_PREFIX}/${CMAKE_PROJECT_NAME}/bin/${OBS_PLUGIN_DIR} ++ LIBRARY DESTINATION /usr/lib/obs-plugins + ) + + feature_summary(WHAT ENABLED_FEATURES DISABLED_FEATURES) diff --git a/backports/looking-glass/werror.patch b/backports/looking-glass/werror.patch new file mode 100644 index 0000000..436419f --- /dev/null +++ b/backports/looking-glass/werror.patch @@ -0,0 +1,24 @@ +diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt +index 836f814..7047365 100644 +--- a/client/CMakeLists.txt ++++ b/client/CMakeLists.txt +@@ -68,7 +68,6 @@ add_compile_options( + "-Wno-unused-parameter" + "$<$:-Wstrict-prototypes>" + "$<$:-Wimplicit-fallthrough=2>" +- "-Werror" + "-Wfatal-errors" + "-ffast-math" + "-fdata-sections" +diff --git a/obs/CMakeLists.txt b/obs/CMakeLists.txt +index 0491e65..60b37ff 100644 +--- a/obs/CMakeLists.txt ++++ b/obs/CMakeLists.txt +@@ -18,7 +18,6 @@ add_feature_info(ENABLE_BACKTRACE ENABLE_BACKTRACE "Backtrace support.") + + add_compile_options( + "-Wall" +- "-Werror" + "-Wfatal-errors" + "-ffast-math" + "-fdata-sections" diff --git a/backports/nb/APKBUILD b/backports/nb/APKBUILD index 9540e5c..d8b8b08 100644 --- a/backports/nb/APKBUILD +++ b/backports/nb/APKBUILD @@ -1,7 +1,7 @@ # Contributor: Quillith # Maintainer: Quillith pkgname=nb -pkgver=7.19.1 +pkgver=7.12.1 pkgrel=0 pkgdesc="Command line note-taking, bookmarking, archiving, and knowledge base application" url="https://github.com/xwmx/nb" @@ -41,5 +41,5 @@ full() { } sha512sums=" -fdfcedc5a32c1a5fe62b00141e25193bc33eee9249fef559938f2b4baf0bff5eb7cc792db3c664c68afb2ba2db84303432790ae5254a9cdd319ce4d9a9face9f nb-7.19.1.tar.gz +ed3d41a809e39a19711c6c97c38216f17f144b8b474eb94aec4134f9756da03440073f3f6557acf8f7959d3d9fba6392d1d5f59e8b94d5269b7336b11353457e nb-7.12.1.tar.gz " diff --git a/backports/nlopt/APKBUILD b/backports/nlopt/APKBUILD new file mode 100644 index 0000000..0be29fe --- /dev/null +++ b/backports/nlopt/APKBUILD @@ -0,0 +1,38 @@ +# Contributor: Anjandev Momi +# Maintainer: Anjandev Momi +pkgname=nlopt +pkgver=2.7.1 +pkgrel=0 +pkgdesc="library for nonlinear optimization, wrapping many algorithms for global and local, constrained or unconstrained, optimization" +url="https://github.com/stevengj/nlopt/" +arch="all" +license="LGPL-2.1-or-later" +makedepends="samurai cmake" +subpackages="$pkgname-dev $pkgname-doc" +source="$pkgname-$pkgver.tar.gz::https://github.com/stevengj/nlopt/archive/refs/tags/v$pkgver.tar.gz" + +build() { + if [ "$CBUILD" != "$CHOST" ]; then + CMAKE_CROSSOPTS="-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_HOST_SYSTEM_NAME=Linux" + fi + cmake -B build -G Ninja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DBUILD_SHARED_LIBS=True \ + -DCMAKE_BUILD_TYPE=minsizerel \ + $CMAKE_CROSSOPTS . + cmake --build build +} + +check() { + cd build + CTEST_OUTPUT_ON_FAILURE=TRUE ctest +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} + +sha512sums=" +e23cb522fc696010574c14b72be85acc0f8ccf0bf208bf2b8789c57d6c5a6e6d419ee10330581518b1c1567018ae909b626ce7761d4fbd5bf112916871e420e2 nlopt-2.7.1.tar.gz +" diff --git a/backports/openssl1.1-compat/APKBUILD b/backports/openssl1.1-compat/APKBUILD new file mode 100644 index 0000000..294cbc1 --- /dev/null +++ b/backports/openssl1.1-compat/APKBUILD @@ -0,0 +1,174 @@ +# Contributor: Ariadne Conill +# Maintainer: Timo Teras +pkgname=openssl1.1-compat +pkgver=1.1.1w +_abiver=${pkgver%.*} +pkgrel=0 +pkgdesc="toolkit for transport layer security (TLS) - version 1.1" +url="https://www.openssl.org/" +arch="all" +license="OpenSSL" +replaces="libressl" +depends_dev="!openssl-dev" +makedepends_build="perl" +makedepends_host="linux-headers" +makedepends="$makedepends_host $makedepends_build" +subpackages="$pkgname-dbg $pkgname-libs-static:_static $pkgname-dev + libcrypto$_abiver:_libcrypto libssl$_abiver:_libssl" +source="https://www.openssl.org/source/openssl-$pkgver.tar.gz + man-section.patch + ppc64.patch + " +builddir="$srcdir/openssl-$pkgver" +pcprefix="openssl$_abiver:pc:" + +# secfixes: +# 1.1.1u-r1: +# - CVE-2023-3446 +# 1.1.1t-r2: +# - CVE-2023-0465 +# 1.1.1t-r1: +# - CVE-2023-0464 +# 1.1.1t-r0: +# - CVE-2022-4304 +# - CVE-2022-4450 +# - CVE-2023-0215 +# - CVE-2023-0286 +# 1.1.1q-r0: +# - CVE-2022-2097 +# 1.1.1n-r0: +# - CVE-2022-0778 +# 1.1.1l-r0: +# - CVE-2021-3711 +# - CVE-2021-3712 +# 1.1.1k-r0: +# - CVE-2021-3449 +# - CVE-2021-3450 +# 1.1.1j-r0: +# - CVE-2021-23841 +# - CVE-2021-23840 +# - CVE-2021-23839 +# 1.1.1i-r0: +# - CVE-2020-1971 +# 1.1.1g-r0: +# - CVE-2020-1967 +# 1.1.1d-r3: +# - CVE-2019-1551 +# 1.1.1d-r1: +# - CVE-2019-1547 +# - CVE-2019-1549 +# - CVE-2019-1563 +# 1.1.1b-r1: +# - CVE-2019-1543 +# 1.1.1a-r0: +# - CVE-2018-0734 +# - CVE-2018-0735 +# 0: +# - CVE-2022-1292 +# - CVE-2022-2068 + +build() { + local _target _optflags + + # openssl will prepend crosscompile always core CC et al + CC=${CC#${CROSS_COMPILE}} + CXX=${CXX#${CROSS_COMPILE}} + CPP=${CPP#${CROSS_COMPILE}} + + # determine target OS for openssl + case "$CARCH" in + aarch64*) _target="linux-aarch64" ;; + arm*) _target="linux-armv4" ;; + ppc) _target="linux-ppc" ;; + ppc64) _target="linux-ppc64" ;; + ppc64le) _target="linux-ppc64le" ;; + x86) _target="linux-elf" ;; + x86_64) _target="linux-x86_64"; _optflags="enable-ec_nistp_64_gcc_128" ;; + s390x) _target="linux64-s390x";; + riscv64) _target="linux-generic64";; + *) msg "Unable to determine architecture from (CARCH=$CARCH)" ; return 1 ;; + esac + + # Configure assumes --options are for it, so can't use + # gcc's --sysroot fake this by overriding CC + [ -n "$CBUILDROOT" ] && CC="$CC --sysroot=$CBUILDROOT" + + # when cross building do not enable threads as libatomic is not avaiable + if [ "$CBUILD" != "$CHOST" ]; then + case $CARCH in + riscv64) _optflags="$_optflags no-threads";; + esac + fi + + perl ./Configure \ + $_target \ + --prefix=/usr \ + --libdir=lib \ + --openssldir=/etc/ssl1.1 \ + shared \ + no-zlib \ + no-async \ + no-comp \ + no-idea \ + no-mdc2 \ + no-rc5 \ + no-ec2m \ + no-sm2 \ + no-sm4 \ + no-ssl2 \ + no-ssl3 \ + no-seed \ + no-weak-ssl-ciphers \ + $_optflags \ + $CPPFLAGS \ + $CFLAGS \ + $LDFLAGS -Wa,--noexecstack + make +} + +check() { + # AFALG tests have a sporadic test failure, just delete the broken + # test for now. + rm -f test/recipes/30-test_afalg.t + + make test +} + +package() { + make DESTDIR="$pkgdir" install_sw install_ssldirs + # remove the script c_rehash + rm "$pkgdir"/usr/bin/c_rehash + mv -f "$pkgdir"/usr/bin/openssl "$pkgdir"/usr/bin/openssl$_abiver +} + +_libcrypto() { + pkgdesc="Crypto library from openssl" + replaces="libressl2.7-libcrypto" + mkdir -p "$subpkgdir"/lib "$subpkgdir"/usr/lib + mv "$pkgdir"/etc "$subpkgdir"/ + for i in "$pkgdir"/usr/lib/libcrypto*; do + mv $i "$subpkgdir"/lib/ + ln -s ../../lib/${i##*/} "$subpkgdir"/usr/lib/${i##*/} + done + mv "$pkgdir"/usr/lib/engines-$_abiver "$subpkgdir"/usr/lib/ +} + +_libssl() { + pkgdesc="SSL shared libraries" + + mkdir -p "$subpkgdir"/lib "$subpkgdir"/usr/lib + for i in "$pkgdir"/usr/lib/libssl*; do + mv $i "$subpkgdir"/lib/ + ln -s ../../lib/${i##*/} "$subpkgdir"/usr/lib/${i##*/} + done +} + +_static() { + default_static +} + +sha512sums=" +b4c625fe56a4e690b57b6a011a225ad0cb3af54bd8fb67af77b5eceac55cc7191291d96a660c5b568a08a2fbf62b4612818e7cca1bb95b2b6b4fc649b0552b6d openssl-1.1.1w.tar.gz +43c3255118db6f5f340dc865c0f25ccbcafe5bf7507585244ca59b4d27daf533d6c3171aa32a8685cbb6200104bec535894b633de13feaadff87ab86739a445a man-section.patch +e040f23770d52b988578f7ff84d77563340f37c026db7643db8e4ef18e795e27d10cb42cb8656da4d9c57a28283a2828729d70f940edc950c3422a54fea55509 ppc64.patch +" diff --git a/backports/openssl1.1-compat/man-section.patch b/backports/openssl1.1-compat/man-section.patch new file mode 100644 index 0000000..0606897 --- /dev/null +++ b/backports/openssl1.1-compat/man-section.patch @@ -0,0 +1,54 @@ +From: Debian OpenSSL Team +Date: Sun, 5 Nov 2017 15:09:09 +0100 +Subject: man-section + +--- + Configurations/unix-Makefile.tmpl | 6 ++++-- + util/process_docs.pl | 3 ++- + 2 files changed, 6 insertions(+), 3 deletions(-) + +diff --git a/Configurations/unix-Makefile.tmpl b/Configurations/unix-Makefile.tmpl +index 1292053546f5..c034d21884d8 100644 +--- a/Configurations/unix-Makefile.tmpl ++++ b/Configurations/unix-Makefile.tmpl +@@ -183,7 +183,8 @@ HTMLDIR=$(DOCDIR)/html + # MANSUFFIX is for the benefit of anyone who may want to have a suffix + # appended after the manpage file section number. "ssl" is popular, + # resulting in files such as config.5ssl rather than config.5. +-MANSUFFIX= ++MANSUFFIX=ssl ++MANSECTION=SSL + HTMLSUFFIX=html + + # For "optional" echo messages, to get "real" silence +@@ -726,7 +727,8 @@ uninstall_runtime: uninstall_programs uninstall_runtime_libs + @[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1) + @$(ECHO) "*** Installing manpages" + $(PERL) $(SRCDIR)/util/process_docs.pl \ +- "--destdir=$(DESTDIR)$(MANDIR)" --type=man --suffix=$(MANSUFFIX) ++ "--destdir=$(DESTDIR)$(MANDIR)" --type=man --suffix=$(MANSUFFIX) \ ++ --mansection=$(MANSECTION) + + uninstall_man_docs: + @$(ECHO) "*** Uninstalling manpages" +diff --git a/util/process_docs.pl b/util/process_docs.pl +index 30b149eb8fcc..424155ea808e 100755 +--- a/util/process_docs.pl ++++ b/util/process_docs.pl +@@ -37,6 +37,7 @@ GetOptions(\%options, + 'type=s', # The result type, 'man' or 'html' + 'suffix:s', # Suffix to add to the extension. + # Only used with type=man ++ 'mansection:s', # Section to put to manpage in + 'remove', # To remove files rather than writing them + 'dry-run|n', # Only output file names on STDOUT + 'debug|D+', +@@ -97,7 +98,7 @@ foreach my $section (sort @{$options{section}}) { + my $name = uc $podname; + my $suffix = { man => ".$podinfo{section}".($options{suffix} // ""), + html => ".html" } -> {$options{type}}; +- my $generate = { man => "pod2man --name=$name --section=$podinfo{section} --center=OpenSSL --release=$config{version} \"$podpath\"", ++ my $generate = { man => "pod2man --name=$name --section=$podinfo{section}$options{mansection} --center=OpenSSL --release=$config{version} \"$podpath\"", + html => "pod2html \"--podroot=$options{sourcedir}\" --htmldir=$updir --podpath=man1:man3:man5:man7 \"--infile=$podpath\" \"--title=$podname\" --quiet" + } -> {$options{type}}; + my $output_dir = catdir($options{destdir}, "man$podinfo{section}"); diff --git a/backports/openssl1.1-compat/ppc64.patch b/backports/openssl1.1-compat/ppc64.patch new file mode 100644 index 0000000..c75ceed --- /dev/null +++ b/backports/openssl1.1-compat/ppc64.patch @@ -0,0 +1,96 @@ +From 34ab13b7d8e3e723adb60be8142e38b7c9cd382a Mon Sep 17 00:00:00 2001 +From: Andy Polyakov +Date: Sun, 5 May 2019 18:25:50 +0200 +Subject: [PATCH] crypto/perlasm/ppc-xlate.pl: add linux64v2 flavour +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This is a big endian ELFv2 configuration. ELFv2 was already being +used for little endian, and big endian was traditionally ELFv1 +but there are practical configurations that use ELFv2 with big +endian nowadays (Adélie Linux, Void Linux, possibly Gentoo, etc.) + +Reviewed-by: Paul Dale +Reviewed-by: Richard Levitte +(Merged from https://github.com/openssl/openssl/pull/8883) +--- + crypto/perlasm/ppc-xlate.pl | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/crypto/perlasm/ppc-xlate.pl b/crypto/perlasm/ppc-xlate.pl +index e52f2f6ea62..5fcd0526dff 100755 +--- a/crypto/perlasm/ppc-xlate.pl ++++ b/crypto/perlasm/ppc-xlate.pl +@@ -49,7 +49,7 @@ + /osx/ && do { $name = "_$name"; + last; + }; +- /linux.*(32|64le)/ ++ /linux.*(32|64(le|v2))/ + && do { $ret .= ".globl $name"; + if (!$$type) { + $ret .= "\n.type $name,\@function"; +@@ -80,7 +80,7 @@ + }; + my $text = sub { + my $ret = ($flavour =~ /aix/) ? ".csect\t.text[PR],7" : ".text"; +- $ret = ".abiversion 2\n".$ret if ($flavour =~ /linux.*64le/); ++ $ret = ".abiversion 2\n".$ret if ($flavour =~ /linux.*64(le|v2)/); + $ret; + }; + my $machine = sub { +@@ -186,7 +186,7 @@ + + # Some ABIs specify vrsave, special-purpose register #256, as reserved + # for system use. +-my $no_vrsave = ($flavour =~ /aix|linux64le/); ++my $no_vrsave = ($flavour =~ /aix|linux64(le|v2)/); + my $mtspr = sub { + my ($f,$idx,$ra) = @_; + if ($idx == 256 && $no_vrsave) { +@@ -318,7 +318,7 @@ sub vfour { + if ($label) { + my $xlated = ($GLOBALS{$label} or $label); + print "$xlated:"; +- if ($flavour =~ /linux.*64le/) { ++ if ($flavour =~ /linux.*64(le|v2)/) { + if ($TYPES{$label} =~ /function/) { + printf "\n.localentry %s,0\n",$xlated; + } + +From 098404128383ded87ba390dd74ecd9e2ffa6f530 Mon Sep 17 00:00:00 2001 +From: Andy Polyakov +Date: Sun, 5 May 2019 18:30:55 +0200 +Subject: [PATCH] Configure: use ELFv2 ABI on some ppc64 big endian systems + +If _CALL_ELF is defined to be 2, it's an ELFv2 system. +Conditionally switch to the v2 perlasm scheme. + +Reviewed-by: Paul Dale +Reviewed-by: Richard Levitte +(Merged from https://github.com/openssl/openssl/pull/8883) +--- + Configure | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +diff --git a/Configure b/Configure +index 22082deb4c7..e303d98deb3 100755 +--- a/Configure ++++ b/Configure +@@ -1402,8 +1402,15 @@ + my %predefined_C = compiler_predefined($config{CROSS_COMPILE}.$config{CC}); + my %predefined_CXX = $config{CXX} + ? compiler_predefined($config{CROSS_COMPILE}.$config{CXX}) + : (); + ++unless ($disabled{asm}) { ++ # big endian systems can use ELFv2 ABI ++ if ($target eq "linux-ppc64") { ++ $target{perlasm_scheme} = "linux64v2" if ($predefined_C{_CALL_ELF} == 2); ++ } ++} ++ + # Check for makedepend capabilities. + if (!$disabled{makedepend}) { + if ($config{target} =~ /^(VC|vms)-/) { diff --git a/backports/openterface-qt/348_address-use-of-deleted-function.patch b/backports/openterface-qt/348_address-use-of-deleted-function.patch deleted file mode 100644 index 2783740..0000000 --- a/backports/openterface-qt/348_address-use-of-deleted-function.patch +++ /dev/null @@ -1,23 +0,0 @@ -diff --git a/serial/SerialPortManager.cpp.orig b/serial/SerialPortManager.cpp -index 22565b5..d444eee 100644 ---- a/serial/SerialPortManager.cpp.orig -+++ b/serial/SerialPortManager.cpp -@@ -1945,8 +1945,9 @@ void SerialPortManager::attemptRecovery() - } - } else { - qCWarning(log_core_serial) << "Serial port recovery attempt failed"; -- if (eventCallback) { -- eventCallback->onStatusUpdate(QString("Recovery attempt %1 failed").arg(m_connectionRetryCount)); -+ if (eventCallback) { -+ int crc = m_connectionRetryCount; -+ eventCallback->onStatusUpdate(QString("Recovery attempt %1 failed").arg(crc)); - } - - // Try again if we haven't exceeded max attempts -@@ -2034,4 +2035,4 @@ void SerialPortManager::applyCommandBasedBaudrateChange(int baudRate, const QStr - } else { - qCWarning(log_core_serial) << logPrefix << "Failed to apply user selected baudrate:" << baudRate; - } --} -\ No newline at end of file -+} diff --git a/backports/openterface-qt/423_deduplicate-logging-categories-and-remove-backslashes.patch b/backports/openterface-qt/423_deduplicate-logging-categories-and-remove-backslashes.patch deleted file mode 100644 index 5e762ff..0000000 --- a/backports/openterface-qt/423_deduplicate-logging-categories-and-remove-backslashes.patch +++ /dev/null @@ -1,586 +0,0 @@ -From 4478cfb004d3db7797e99fd3bdb23bf880a9c85b Mon Sep 17 00:00:00 2001 -From: John Lane <1786613+johnlane@users.noreply.github.com> -Date: Wed, 3 Dec 2025 21:19:33 +0000 -Subject: [PATCH 1/2] Remove additional backslashes and add missing cpp and h - files - ---- - openterfaceQT.pro | 28 +++++++++++++++++++--------- - 1 file changed, 19 insertions(+), 9 deletions(-) - -diff --git a/openterfaceQT.pro b/openterfaceQT.pro -index 3460dbac..f0d878e8 100644 ---- a/openterfaceQT.pro -+++ b/openterfaceQT.pro -@@ -84,16 +84,26 @@ SOURCES += main.cpp \ - !win32 { - SOURCES += host/backend/ffmpegbackendhandler.cpp \ - host/backend/gstreamerbackendhandler.cpp \ -- host/backend/gstreamer/sinkselector.cpp \\ -- host/backend/gstreamer/queueconfigurator.cpp \\ -- host/backend/gstreamer/videooverlaymanager.cpp \\ -- host/backend/gstreamer/pipelinebuilder.cpp -+ host/backend/gstreamer/pipelinefactory.cpp \ -+ host/backend/gstreamer/externalgstrunner.cpp \ -+ host/backend/gstreamer/inprocessgstrunner.cpp \ -+ host/backend/gstreamer/sinkselector.cpp \ -+ host/backend/gstreamer/queueconfigurator.cpp \ -+ host/backend/gstreamer/videooverlaymanager.cpp \ -+ host/backend/gstreamer/pipelinebuilder.cpp \ -+ host/backend/gstreamer/recordingmanager.cpp \ -+ host/backend/gstreamer/gstreamerhelpers.cpp - HEADERS += host/backend/ffmpegbackendhandler.h \ - host/backend/gstreamerbackendhandler.h \ -- host/backend/gstreamer/sinkselector.h \\ -- host/backend/gstreamer/queueconfigurator.h \\ -- host/backend/gstreamer/videooverlaymanager.h \\ -- host/backend/gstreamer/pipelinebuilder.h -+ host/backend/gstreamer/pipelinefactory.h \ -+ host/backend/gstreamer/externalgstrunner.h \ -+ host/backend/gstreamer/inprocessgstrunner.h \ -+ host/backend/gstreamer/sinkselector.h \ -+ host/backend/gstreamer/queueconfigurator.h \ -+ host/backend/gstreamer/videooverlaymanager.h \ -+ host/backend/gstreamer/pipelinebuilder.h \ -+ host/backend/gstreamer/recordingmanager.h \ -+ host/backend/gstreamer/gstreamerhelpers.h - } - - -@@ -263,4 +273,4 @@ TRANSLATIONS += config/languages/openterface_en.ts \ - config/languages/openterface_se.ts \ - config/languages/openterface_de.ts \ - config/languages/openterface_zh.ts -- # Add more languages here -\ No newline at end of file -+ # Add more languages here - -From ccd8f51fe510684439edf0d5f8083e4dd1423836 Mon Sep 17 00:00:00 2001 -From: John Lane <1786613+johnlane@users.noreply.github.com> -Date: Wed, 3 Dec 2025 21:26:20 +0000 -Subject: [PATCH 2/2] De-duplicate logging categories - ---- - host/backend/gstreamer/gstreamerhelpers.cpp | 22 ++-- - host/backend/gstreamer/queueconfigurator.cpp | 8 +- - .../backend/gstreamer/videooverlaymanager.cpp | 118 +++++++++--------- - 3 files changed, 74 insertions(+), 74 deletions(-) - -diff --git a/host/backend/gstreamer/gstreamerhelpers.cpp b/host/backend/gstreamer/gstreamerhelpers.cpp -index 6fc1dd6e..4739da17 100644 ---- a/host/backend/gstreamer/gstreamerhelpers.cpp -+++ b/host/backend/gstreamer/gstreamerhelpers.cpp -@@ -4,7 +4,7 @@ - #include - #include - --Q_LOGGING_CATEGORY(log_gstreamer_backend, "opf.backend.gstreamer") -+Q_LOGGING_CATEGORY(log_gstreamer_gstreamerhelpers, "opf.backend.gstreamerhelpers") - - using namespace Openterface::GStreamer::GstHelpers; - -@@ -16,7 +16,7 @@ bool Openterface::GStreamer::GstHelpers::setPipelineStateWithTimeout(void* eleme - { - if (!elementPtr) { - if (outError) *outError = QStringLiteral("Element pointer is null"); -- qCWarning(log_gstreamer_backend) << "setPipelineStateWithTimeout: element pointer is null"; -+ qCWarning(log_gstreamer_gstreamerhelpers) << "setPipelineStateWithTimeout: element pointer is null"; - return false; - } - -@@ -24,7 +24,7 @@ bool Openterface::GStreamer::GstHelpers::setPipelineStateWithTimeout(void* eleme - - GstStateChangeReturn ret = gst_element_set_state(element, static_cast(targetState)); - if (ret == GST_STATE_CHANGE_FAILURE) { -- qCCritical(log_gstreamer_backend) << "Failed to set element state to" << targetState; -+ qCCritical(log_gstreamer_gstreamerhelpers) << "Failed to set element state to" << targetState; - // Try to pull any error from the bus for diagnostics - // Caller may pass a bus to parseAndLogGstErrorMessage, but we don't have it here. - if (outError) *outError = QStringLiteral("Failed to set state (GST_STATE_CHANGE_FAILURE)"); -@@ -35,13 +35,13 @@ bool Openterface::GStreamer::GstHelpers::setPipelineStateWithTimeout(void* eleme - ret = gst_element_get_state(element, &state, &pending, static_cast(timeoutMs) * GST_MSECOND); - if (ret == GST_STATE_CHANGE_FAILURE) { - if (outError) *outError = QStringLiteral("State change failure"); -- qCCritical(log_gstreamer_backend) << "State change failure waiting for target state"; -+ qCCritical(log_gstreamer_gstreamerhelpers) << "State change failure waiting for target state"; - return false; - } - - if (state != static_cast(targetState)) { - if (outError) *outError = QStringLiteral("Element did not reach target state in timeout"); -- qCCritical(log_gstreamer_backend) << "Element failed to reach state" << targetState << "(current:" << state << ", pending:" << pending << ")"; -+ qCCritical(log_gstreamer_gstreamerhelpers) << "Element failed to reach state" << targetState << "(current:" << state << ", pending:" << pending << ")"; - return false; - } - -@@ -51,14 +51,14 @@ bool Openterface::GStreamer::GstHelpers::setPipelineStateWithTimeout(void* eleme - void Openterface::GStreamer::GstHelpers::parseAndLogGstErrorMessage(void* busPtr, const char* context) - { - if (!busPtr) { -- qCWarning(log_gstreamer_backend) << "Bus not available for error details" << (context ? context : ""); -+ qCWarning(log_gstreamer_gstreamerhelpers) << "Bus not available for error details" << (context ? context : ""); - return; - } - - GstBus* bus = static_cast(busPtr); - GstMessage* msg = gst_bus_pop_filtered(bus, GST_MESSAGE_ERROR); - if (!msg) { -- qCDebug(log_gstreamer_backend) << "No error message available on bus" << (context ? context : ""); -+ qCDebug(log_gstreamer_gstreamerhelpers) << "No error message available on bus" << (context ? context : ""); - return; - } - -@@ -66,8 +66,8 @@ void Openterface::GStreamer::GstHelpers::parseAndLogGstErrorMessage(void* busPtr - gchar* debug_info = nullptr; - gst_message_parse_error(msg, &error, &debug_info); - -- qCCritical(log_gstreamer_backend) << "GStreamer Error:" << (error ? error->message : "Unknown") << (context ? context : ""); -- qCCritical(log_gstreamer_backend) << "Debug info:" << (debug_info ? debug_info : "None"); -+ qCCritical(log_gstreamer_gstreamerhelpers) << "GStreamer Error:" << (error ? error->message : "Unknown") << (context ? context : ""); -+ qCCritical(log_gstreamer_gstreamerhelpers) << "Debug info:" << (debug_info ? debug_info : "None"); - - if (error) g_error_free(error); - if (debug_info) g_free(debug_info); -@@ -79,13 +79,13 @@ void Openterface::GStreamer::GstHelpers::parseAndLogGstErrorMessage(void* busPtr - bool Openterface::GStreamer::GstHelpers::setPipelineStateWithTimeout(void* /*elementPtr*/, int /*targetState*/, int /*timeoutMs*/, QString* outError) - { - if (outError) *outError = QStringLiteral("GStreamer not available in this build"); -- qCWarning(log_gstreamer_backend) << "setPipelineStateWithTimeout called but GStreamer is not compiled in"; -+ qCWarning(log_gstreamer_gstreamerhelpers) << "setPipelineStateWithTimeout called but GStreamer is not compiled in"; - return false; - } - - void Openterface::GStreamer::GstHelpers::parseAndLogGstErrorMessage(void* /*busPtr*/, const char* context) - { -- qCDebug(log_gstreamer_backend) << "GStreamer not compiled in - no bus to parse" << (context ? context : ""); -+ qCDebug(log_gstreamer_gstreamerhelpers) << "GStreamer not compiled in - no bus to parse" << (context ? context : ""); - } - - #endif // HAVE_GSTREAMER -diff --git a/host/backend/gstreamer/queueconfigurator.cpp b/host/backend/gstreamer/queueconfigurator.cpp -index b7bea42e..12290193 100644 ---- a/host/backend/gstreamer/queueconfigurator.cpp -+++ b/host/backend/gstreamer/queueconfigurator.cpp -@@ -8,7 +8,7 @@ - #include - #endif - --Q_LOGGING_CATEGORY(log_gstreamer_backend, "opf.backend.gstreamer") -+Q_LOGGING_CATEGORY(log_gstreamer_queueconfigurator, "opf.backend.queueconfigurator") - - using namespace Openterface::GStreamer; - -@@ -26,10 +26,10 @@ void QueueConfigurator::configureDisplayQueue(void* pipeline) - "max-size-time", G_GUINT64_CONSTANT(100000000), // 100ms - "leaky", 2, // GST_QUEUE_LEAK_DOWNSTREAM - NULL); -- qCDebug(log_gstreamer_backend) << "✓ Configured display queue with higher priority for qtsink"; -+ qCDebug(log_gstreamer_queueconfigurator) << "✓ Configured display queue with higher priority for qtsink"; - gst_object_unref(displayQueue); - } else { -- qCDebug(log_gstreamer_backend) << "Display queue element not found (no named display-queue)"; -+ qCDebug(log_gstreamer_queueconfigurator) << "Display queue element not found (no named display-queue)"; - } - #else - Q_UNUSED(pipeline); -@@ -50,7 +50,7 @@ void QueueConfigurator::configureRecordingQueue(void* pipeline) - "max-size-time", G_GUINT64_CONSTANT(500000000), // 500ms - "leaky", 1, // GST_QUEUE_LEAK_UPSTREAM - NULL); -- qCDebug(log_gstreamer_backend) << "✓ Configured recording queue with lower priority relative to display"; -+ qCDebug(log_gstreamer_queueconfigurator) << "✓ Configured recording queue with lower priority relative to display"; - gst_object_unref(recordingQueue); - } - #else -diff --git a/host/backend/gstreamer/videooverlaymanager.cpp b/host/backend/gstreamer/videooverlaymanager.cpp -index d8bf42f3..2dbe3bbf 100644 ---- a/host/backend/gstreamer/videooverlaymanager.cpp -+++ b/host/backend/gstreamer/videooverlaymanager.cpp -@@ -22,7 +22,7 @@ static int x11_overlay_error_handler_local(Display* display, XErrorEvent* error) - } - #endif - --Q_LOGGING_CATEGORY(log_gstreamer_backend, "opf.backend.gstreamer") -+Q_LOGGING_CATEGORY(log_gstreamer_videooverlaymanager, "opf.backend.videooverlaymanager") - - using namespace Openterface::GStreamer; - -@@ -30,36 +30,36 @@ bool VideoOverlayManager::embedVideoInWidget(void* pipeline, QWidget* widget) - { - #ifdef HAVE_GSTREAMER - if (!widget || !pipeline) { -- qCWarning(log_gstreamer_backend) << "Cannot embed video: widget or pipeline is null"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "Cannot embed video: widget or pipeline is null"; - return false; - } - - GstElement* videoSink = gst_bin_get_by_name(GST_BIN(pipeline), "videosink"); - if (!videoSink) { -- qCWarning(log_gstreamer_backend) << "No video sink element named 'videosink' found in pipeline"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "No video sink element named 'videosink' found in pipeline"; - videoSink = gst_bin_get_by_interface(GST_BIN(pipeline), GST_TYPE_VIDEO_OVERLAY); - if (!videoSink) { -- qCWarning(log_gstreamer_backend) << "No video overlay interface found in pipeline either"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "No video overlay interface found in pipeline either"; - return false; - } - } - - WId winId = widget->winId(); - if (winId) { -- qCDebug(log_gstreamer_backend) << "Embedding video in widget with window ID:" << winId; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Embedding video in widget with window ID:" << winId; - gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(videoSink), winId); - gst_object_unref(videoSink); -- qCDebug(log_gstreamer_backend) << "Video embedded in widget successfully"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Video embedded in widget successfully"; - return true; - } else { -- qCWarning(log_gstreamer_backend) << "Widget window ID is null, cannot embed video"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "Widget window ID is null, cannot embed video"; - gst_object_unref(videoSink); - return false; - } - #else - Q_UNUSED(pipeline) - Q_UNUSED(widget) -- qCDebug(log_gstreamer_backend) << "Using autovideosink for video output (no in-process GStreamer)"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Using autovideosink for video output (no in-process GStreamer)"; - return true; - #endif - } -@@ -68,36 +68,36 @@ bool VideoOverlayManager::embedVideoInGraphicsView(void* pipeline, QGraphicsView - { - #ifdef HAVE_GSTREAMER - if (!view || !pipeline) { -- qCWarning(log_gstreamer_backend) << "Cannot embed video: graphics view or pipeline is null"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "Cannot embed video: graphics view or pipeline is null"; - return false; - } - - GstElement* videoSink = gst_bin_get_by_name(GST_BIN(pipeline), "videosink"); - if (!videoSink) { -- qCWarning(log_gstreamer_backend) << "No video sink element named 'videosink' found in pipeline"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "No video sink element named 'videosink' found in pipeline"; - videoSink = gst_bin_get_by_interface(GST_BIN(pipeline), GST_TYPE_VIDEO_OVERLAY); - if (!videoSink) { -- qCWarning(log_gstreamer_backend) << "No video overlay interface found in pipeline either"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "No video overlay interface found in pipeline either"; - return false; - } - } - - WId winId = view->winId(); - if (winId) { -- qCDebug(log_gstreamer_backend) << "Embedding video in graphics view with window ID:" << winId; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Embedding video in graphics view with window ID:" << winId; - gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(videoSink), winId); - gst_object_unref(videoSink); -- qCDebug(log_gstreamer_backend) << "Video embedded in graphics view successfully"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Video embedded in graphics view successfully"; - return true; - } else { -- qCWarning(log_gstreamer_backend) << "Graphics view window ID is null, cannot embed video"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "Graphics view window ID is null, cannot embed video"; - gst_object_unref(videoSink); - return false; - } - #else - Q_UNUSED(pipeline) - Q_UNUSED(view) -- qCDebug(log_gstreamer_backend) << "Using autovideosink for video output (no in-process GStreamer)"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Using autovideosink for video output (no in-process GStreamer)"; - return true; - #endif - } -@@ -106,36 +106,36 @@ bool VideoOverlayManager::embedVideoInVideoPane(void* pipeline, ::VideoPane* vid - { - #ifdef HAVE_GSTREAMER - if (!videoPane || !pipeline) { -- qCWarning(log_gstreamer_backend) << "Cannot embed video: VideoPane or pipeline is null"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "Cannot embed video: VideoPane or pipeline is null"; - return false; - } - - GstElement* videoSink = gst_bin_get_by_name(GST_BIN(pipeline), "videosink"); - if (!videoSink) { -- qCWarning(log_gstreamer_backend) << "No video sink element named 'videosink' found in pipeline"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "No video sink element named 'videosink' found in pipeline"; - videoSink = gst_bin_get_by_interface(GST_BIN(pipeline), GST_TYPE_VIDEO_OVERLAY); - if (!videoSink) { -- qCWarning(log_gstreamer_backend) << "No video overlay interface found in pipeline either"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "No video overlay interface found in pipeline either"; - return false; - } - } - - WId winId = videoPane->getVideoOverlayWindowId(); - if (winId) { -- qCDebug(log_gstreamer_backend) << "Embedding video in VideoPane overlay with window ID:" << winId; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Embedding video in VideoPane overlay with window ID:" << winId; - gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(videoSink), winId); - gst_object_unref(videoSink); -- qCDebug(log_gstreamer_backend) << "Video embedded in VideoPane overlay successfully"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Video embedded in VideoPane overlay successfully"; - return true; - } else { -- qCWarning(log_gstreamer_backend) << "VideoPane overlay window ID is null, cannot embed video"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "VideoPane overlay window ID is null, cannot embed video"; - gst_object_unref(videoSink); - return false; - } - #else - Q_UNUSED(pipeline) - Q_UNUSED(videoPane) -- qCDebug(log_gstreamer_backend) << "Using autovideosink for video output (no in-process GStreamer)"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Using autovideosink for video output (no in-process GStreamer)"; - return true; - #endif - } -@@ -144,7 +144,7 @@ bool VideoOverlayManager::setupVideoOverlay(void* videoSinkPtr, WId windowId, QW - { - #ifdef HAVE_GSTREAMER - if (!videoSinkPtr || windowId == 0) { -- qCWarning(log_gstreamer_backend) << "Invalid parameters for overlay setup: sink=" << videoSinkPtr << "windowId=" << windowId; -+ qCWarning(log_gstreamer_videooverlaymanager) << "Invalid parameters for overlay setup: sink=" << videoSinkPtr << "windowId=" << windowId; - return false; - } - -@@ -152,7 +152,7 @@ bool VideoOverlayManager::setupVideoOverlay(void* videoSinkPtr, WId windowId, QW - - // Check if the sink supports video overlay interface - if (GST_IS_VIDEO_OVERLAY(videoSink)) { -- qCDebug(log_gstreamer_backend) << "Sink supports video overlay - setting up overlay with window ID:" << windowId; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Sink supports video overlay - setting up overlay with window ID:" << windowId; - - #ifdef Q_OS_LINUX - // Add X11 error handling to prevent segmentation fault -@@ -175,12 +175,12 @@ bool VideoOverlayManager::setupVideoOverlay(void* videoSinkPtr, WId windowId, QW - if (g_object_class_find_property(G_OBJECT_GET_CLASS(videoSink), "force-aspect-ratio")) { - // Allow the sink to stretch to the configured render rectangle so overlay scales to widget size - g_object_set(videoSink, "force-aspect-ratio", FALSE, NULL); -- qCDebug(log_gstreamer_backend) << "Disabled force-aspect-ratio on video sink to allow fill scaling"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Disabled force-aspect-ratio on video sink to allow fill scaling"; - } - - if (g_object_class_find_property(G_OBJECT_GET_CLASS(videoSink), "pixel-aspect-ratio")) { - g_object_set(videoSink, "pixel-aspect-ratio", "1/1", NULL); -- qCDebug(log_gstreamer_backend) << "Set pixel-aspect-ratio to 1:1 on video sink"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Set pixel-aspect-ratio to 1:1 on video sink"; - } - - // Configure render rectangle based on provided targets -@@ -188,13 +188,13 @@ bool VideoOverlayManager::setupVideoOverlay(void* videoSinkPtr, WId windowId, QW - QSize widgetSize = videoWidget->size(); - if (widgetSize.width() > 0 && widgetSize.height() > 0) { - gst_video_overlay_set_render_rectangle(GST_VIDEO_OVERLAY(videoSink), 0, 0, widgetSize.width(), widgetSize.height()); -- qCDebug(log_gstreamer_backend) << "Set render rectangle to widget size:" << widgetSize; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Set render rectangle to widget size:" << widgetSize; - } - } else if (graphicsVideoItem) { - QRectF itemRect = graphicsVideoItem->boundingRect(); - if (itemRect.width() > 0 && itemRect.height() > 0) { - gst_video_overlay_set_render_rectangle(GST_VIDEO_OVERLAY(videoSink), 0, 0, (gint)itemRect.width(), (gint)itemRect.height()); -- qCDebug(log_gstreamer_backend) << "Set render rectangle to video item size:" << itemRect.size(); -+ qCDebug(log_gstreamer_videooverlaymanager) << "Set render rectangle to video item size:" << itemRect.size(); - } - } - -@@ -205,18 +205,18 @@ bool VideoOverlayManager::setupVideoOverlay(void* videoSinkPtr, WId windowId, QW - XCloseDisplay(display); - - if (x11_overlay_error_occurred_local) { -- qCWarning(log_gstreamer_backend) << "X11 error occurred during overlay setup - continuing without embedding"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "X11 error occurred during overlay setup - continuing without embedding"; - } else { -- qCDebug(log_gstreamer_backend) << "Video overlay setup completed successfully"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Video overlay setup completed successfully"; - } - } else if (!old_handler) { -- qCDebug(log_gstreamer_backend) << "Video overlay setup completed (no X11 error handling)"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Video overlay setup completed (no X11 error handling)"; - } - #endif - -- qCDebug(log_gstreamer_backend) << "Overlay setup completed"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Overlay setup completed"; - } catch (...) { -- qCCritical(log_gstreamer_backend) << "Exception during video overlay setup - continuing without embedding"; -+ qCCritical(log_gstreamer_videooverlaymanager) << "Exception during video overlay setup - continuing without embedding"; - #ifdef Q_OS_LINUX - if (display && old_handler) { - XSetErrorHandler(old_handler); -@@ -242,17 +242,17 @@ bool VideoOverlayManager::setupVideoOverlay(void* videoSinkPtr, WId windowId, QW - if (gst_iterator_next(iter, &item) == GST_ITERATOR_OK) { - actualSink = GST_ELEMENT(g_value_get_object(&item)); - if (actualSink && GST_IS_VIDEO_OVERLAY(actualSink)) { -- qCDebug(log_gstreamer_backend) << "Found overlay-capable sink inside autovideosink"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Found overlay-capable sink inside autovideosink"; - gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(actualSink), windowId); - // Use target widget size if available to set explicit render rectangle so scaling works - if (videoWidget) { - QSize widgetSize = videoWidget->size(); - if (widgetSize.width() > 0 && widgetSize.height() > 0) { - gst_video_overlay_set_render_rectangle(GST_VIDEO_OVERLAY(actualSink), 0, 0, widgetSize.width(), widgetSize.height()); -- qCDebug(log_gstreamer_backend) << "Set render rectangle to widget size for autovideosink child sink:" << widgetSize; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Set render rectangle to widget size for autovideosink child sink:" << widgetSize; - if (g_object_class_find_property(G_OBJECT_GET_CLASS(actualSink), "force-aspect-ratio")) { - g_object_set(actualSink, "force-aspect-ratio", FALSE, NULL); -- qCDebug(log_gstreamer_backend) << "Disabled force-aspect-ratio on autovideosink child sink"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Disabled force-aspect-ratio on autovideosink child sink"; - } - } else { - gst_video_overlay_set_render_rectangle(GST_VIDEO_OVERLAY(actualSink), 0, 0, -1, -1); -@@ -269,18 +269,18 @@ bool VideoOverlayManager::setupVideoOverlay(void* videoSinkPtr, WId windowId, QW - } - gst_iterator_free(iter); - } -- qCDebug(log_gstreamer_backend) << "autovideosink selected sink doesn't support overlay - video will display in separate window"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "autovideosink selected sink doesn't support overlay - video will display in separate window"; - return false; - } - -- qCWarning(log_gstreamer_backend) << "Sink does not support video overlay:" << sinkName; -+ qCWarning(log_gstreamer_videooverlaymanager) << "Sink does not support video overlay:" << sinkName; - return false; - #else - Q_UNUSED(videoSinkPtr) - Q_UNUSED(windowId) - Q_UNUSED(videoWidget) - Q_UNUSED(graphicsVideoItem) -- qCDebug(log_gstreamer_backend) << "No in-process GStreamer - overlay unavailable"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "No in-process GStreamer - overlay unavailable"; - return false; - #endif - } -@@ -300,7 +300,7 @@ bool VideoOverlayManager::setupVideoOverlayForPipeline(void* pipeline, WId windo - gst_object_unref(videoSink); - return ok; - } -- qCWarning(log_gstreamer_backend) << "No video sink found in pipeline"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "No video sink found in pipeline"; - return false; - #else - Q_UNUSED(pipeline) -@@ -315,10 +315,10 @@ bool VideoOverlayManager::completePendingOverlaySetup(void* pipeline, - ::VideoPane* videoPane, - bool &pendingFlag) - { -- qCDebug(log_gstreamer_backend) << "VideoOverlayManager: Completing pending overlay setup..."; -+ qCDebug(log_gstreamer_videooverlaymanager) << "VideoOverlayManager: Completing pending overlay setup..."; - - if (!pendingFlag || !pipeline) { -- qCDebug(log_gstreamer_backend) << "No pending setup or no pipeline"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "No pending setup or no pipeline"; - return false; - } - -@@ -326,7 +326,7 @@ bool VideoOverlayManager::completePendingOverlaySetup(void* pipeline, - const bool isXcb = platform.contains("xcb", Qt::CaseInsensitive); - const bool hasXDisplay = !qgetenv("DISPLAY").isEmpty(); - if (!isXcb || !hasXDisplay) { -- qCWarning(log_gstreamer_backend) << "Skipping deferred overlay setup: platform is" << platform << "(DISPLAY set:" << hasXDisplay << ")"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "Skipping deferred overlay setup: platform is" << platform << "(DISPLAY set:" << hasXDisplay << ")"; - pendingFlag = false; - return false; - } -@@ -335,7 +335,7 @@ bool VideoOverlayManager::completePendingOverlaySetup(void* pipeline, - - if (videoPane) { - windowId = videoPane->getVideoOverlayWindowId(); -- qCDebug(log_gstreamer_backend) << "Completing overlay setup with VideoPane window ID:" << windowId; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Completing overlay setup with VideoPane window ID:" << windowId; - } else if (graphicsVideoItem) { - if (graphicsVideoItem->scene()) { - QList views = graphicsVideoItem->scene()->views(); -@@ -344,21 +344,21 @@ bool VideoOverlayManager::completePendingOverlaySetup(void* pipeline, - if (auto pane = qobject_cast(view)) { - if (pane->isDirectGStreamerModeEnabled() && pane->getOverlayWidget()) { - windowId = pane->getVideoOverlayWindowId(); -- qCDebug(log_gstreamer_backend) << "Completing overlay setup with VideoPane overlay widget window ID:" << windowId; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Completing overlay setup with VideoPane overlay widget window ID:" << windowId; - } else { -- qCDebug(log_gstreamer_backend) << "VideoPane overlay widget still not ready"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "VideoPane overlay widget still not ready"; - return false; - } - } else { - windowId = view->winId(); -- qCDebug(log_gstreamer_backend) << "Completing overlay setup with graphics view window ID:" << windowId; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Completing overlay setup with graphics view window ID:" << windowId; - } - } else { -- qCWarning(log_gstreamer_backend) << "Graphics video item has no associated view"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "Graphics video item has no associated view"; - return false; - } - } else { -- qCWarning(log_gstreamer_backend) << "Graphics video item has no scene"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "Graphics video item has no scene"; - return false; - } - } -@@ -367,7 +367,7 @@ bool VideoOverlayManager::completePendingOverlaySetup(void* pipeline, - GstElement* videoSink = gst_bin_get_by_name(GST_BIN(pipeline), "videosink"); - if (!videoSink) { - videoSink = gst_bin_get_by_interface(GST_BIN(pipeline), GST_TYPE_VIDEO_OVERLAY); -- if (videoSink) qCDebug(log_gstreamer_backend) << "Deferred path: found sink by overlay interface"; -+ if (videoSink) qCDebug(log_gstreamer_videooverlaymanager) << "Deferred path: found sink by overlay interface"; - } - - if (videoSink) { -@@ -384,14 +384,14 @@ bool VideoOverlayManager::completePendingOverlaySetup(void* pipeline, - targetWidget = videoWidget; - } - if (targetWidget) { -- qCDebug(log_gstreamer_backend) << "Deferred: binding qt6videosink to QWidget" << targetWidget; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Deferred: binding qt6videosink to QWidget" << targetWidget; - g_object_set(G_OBJECT(videoSink), "widget", (gpointer)targetWidget, nullptr); - gst_object_unref(videoSink); - pendingFlag = false; -- qCDebug(log_gstreamer_backend) << "Deferred qt6videosink binding completed"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Deferred qt6videosink binding completed"; - return true; - } else { -- qCWarning(log_gstreamer_backend) << "Deferred: no target QWidget available to bind qt6videosink"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "Deferred: no target QWidget available to bind qt6videosink"; - } - } - -@@ -399,30 +399,30 @@ bool VideoOverlayManager::completePendingOverlaySetup(void* pipeline, - const bool looksLikeXSink = sinkNameBA.contains("xvimage") || sinkNameBA.contains("ximage"); - - if (!supportsOverlay) { -- qCWarning(log_gstreamer_backend) << "Deferred overlay skipped: sink does not support overlay interface (" << sinkName << ")"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "Deferred overlay skipped: sink does not support overlay interface (" << sinkName << ")"; - gst_object_unref(videoSink); - pendingFlag = false; - return false; - } - - if (!looksLikeXSink) { -- qCWarning(log_gstreamer_backend) << "Deferred overlay skipped: sink is not an X sink (" << sinkName << ") on platform" << QGuiApplication::platformName(); -+ qCWarning(log_gstreamer_videooverlaymanager) << "Deferred overlay skipped: sink is not an X sink (" << sinkName << ") on platform" << QGuiApplication::platformName(); - gst_object_unref(videoSink); - pendingFlag = false; - return false; - } - -- qCDebug(log_gstreamer_backend) << "Setting up deferred video overlay with window ID:" << windowId << "using sink" << sinkName; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Setting up deferred video overlay with window ID:" << windowId << "using sink" << sinkName; - gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(videoSink), windowId); - gst_object_unref(videoSink); - pendingFlag = false; -- qCDebug(log_gstreamer_backend) << "Deferred overlay setup completed successfully"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Deferred overlay setup completed successfully"; - return true; - } else { -- qCWarning(log_gstreamer_backend) << "Could not find video sink for deferred overlay setup"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "Could not find video sink for deferred overlay setup"; - } - } else { -- qCWarning(log_gstreamer_backend) << "Still no valid window ID available for deferred overlay setup"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "Still no valid window ID available for deferred overlay setup"; - } - - return false; diff --git a/backports/openterface-qt/51-openterface-permissions.rules b/backports/openterface-qt/51-openterface-permissions.rules deleted file mode 100644 index a74cfbd..0000000 --- a/backports/openterface-qt/51-openterface-permissions.rules +++ /dev/null @@ -1,2 +0,0 @@ -SUBSYSTEM=="usb", ATTRS{idVendor}=="534d", ATTRS{idProduct}=="2109", MODE="0660", GROUP="plugdev" -SUBSYSTEM=="usb", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE="0660", GROUP="plugdev" diff --git a/backports/openterface-qt/APKBUILD b/backports/openterface-qt/APKBUILD deleted file mode 100644 index a96e328..0000000 --- a/backports/openterface-qt/APKBUILD +++ /dev/null @@ -1,73 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -pkgname=openterface-qt -pkgver=0.5.7 -pkgrel=0 -pkgdesc="Openterface Mini-KVM Host Application" -# armhf: missing qt6-qtmultimedia -# riscv64: missing libgtk-3 -arch="all !armhf !riscv64" -url="https://openterface.com/" -license="AGPL-3.0-only" -depends=" - gst-plugins-good-qt - hicolor-icon-theme - qt6-qtmultimedia-ffmpeg - " -makedepends=" - cmake - ffmpeg-dev - libgudev-dev - libjpeg-turbo-dev - libusb-dev - libx11-dev - libxv-dev - patchelf - qt6-qtbase-dev - qt6-qtmultimedia-dev - qt6-qtserialport-dev - samurai - v4l-utils-dev -" -install="$pkgname.post-install" -builddir="$srcdir"/Openterface_QT-$pkgver -options="!check" # No testsuite -source=" - $pkgname-$pkgver.tar.gz::https://github.com/TechxArtisanStudio/Openterface_QT/archive/$pkgver.tar.gz - openterfaceQT.desktop - 51-openterface-permissions.rules - 348_address-use-of-deleted-function.patch - 423_deduplicate-logging-categories-and-remove-backslashes.patch - use-system-libs.patch - " - -prepare() { - default_prepare - mkdir build && cd build - # OPENTERFACE_BUILD_STATIC: do not build vendored dependencies - cmake -DOPENTERFACE_BUILD_STATIC=OFF .. -} - -build() { - ninja -C build -} - -package() { - install -Dm755 "$builddir"/build/openterfaceQT "$pkgdir"/usr/bin/openterfaceQT - install -Dm644 "$srcdir"/51-openterface-permissions.rules "$pkgdir"/etc/udev/rules.d/51-openterface-permissions.rules - install -Dm644 "$srcdir"/openterfaceQT.desktop "$pkgdir"/usr/share/applications/openterfaceQT.desktop - install -Dm644 "$builddir"/images/icon_32.png "$pkgdir"/usr/share/icons/hicolor/32x32/apps/openterfaceQT.png - install -Dm644 "$builddir"/images/icon_64.png "$pkgdir"/usr/share/icons/hicolor/64x64/apps/openterfaceQT.png - install -Dm644 "$builddir"/images/icon_128.png "$pkgdir"/usr/share/icons/hicolor/128x128/apps/openterfaceQT.png - - # vanilla build does not set rpath, since it usually wants to use vendored libs - patchelf --set-rpath '/usr/lib' "$pkgdir"/usr/bin/openterfaceQT -} - -sha512sums=" -996415d6f7d3ed950901c380a0520ddab8c31e8d3c2e2bb3a5f631a5600cace6bcf6bf89871e4e4ef818009eeb08c448fd793e1e4758ecccf1e1a21ff04fd560 openterface-qt-0.5.7.tar.gz -e39cfa04cbcb59e8ba54110a28eff41854f73fa7c4baeeed5433907c79781946f12bd3a731763caa1d591e664eab0650bdbd2a844954baa12bb96a76a17c6e4f openterfaceQT.desktop -f50d721a6a2d1e0183c81e99230e91e127ee6c6f3243af1cff3e3cb78e2913ebab3346ec8b461a4710220d1ce2e12a7cc960ded6e0dc2def539375c6e737b647 51-openterface-permissions.rules -69b5556ec9e56792e848ea1ff9374e12e6901da821ecd9d6f2f521ea30f48e564c2cd0631fc1360acd6c8c6249cfa718d5baf7ed6929e1e92f63eeaea578bcb3 348_address-use-of-deleted-function.patch -47580d07a2d971ad2010e78373d1abbcbc05b3fbd3a7e466faed50dc9a0d632db30c0a7622e7324aeb0eb38d49e3241cb6cebc835f7adeed977b1dd7b48ea5f6 423_deduplicate-logging-categories-and-remove-backslashes.patch -22ecac74fe0923f39f538a5d587f8c100d9709631a1584bd20646e09dcf777cd3042670d08195626220f0494e5efa9549a299c5e1fd8c42f991ec5746b42cc86 use-system-libs.patch -" diff --git a/backports/openterface-qt/openterface-qt.post-install b/backports/openterface-qt/openterface-qt.post-install deleted file mode 100755 index b853907..0000000 --- a/backports/openterface-qt/openterface-qt.post-install +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -echo "Setup the dialout permission for Serial port." -echo "Run: sudo usermod -a -G video,plugdev \$USER" diff --git a/backports/openterface-qt/openterfaceQT.desktop b/backports/openterface-qt/openterfaceQT.desktop deleted file mode 100644 index 907976c..0000000 --- a/backports/openterface-qt/openterfaceQT.desktop +++ /dev/null @@ -1,8 +0,0 @@ -[Desktop Entry] -Version=1.0 -Type=Application -Name=OpenterfaceQT -Exec=/usr/bin/openterfaceQT -Icon=openterfaceQT -Comment=OpenterfaceQT Application -Categories=Utility; diff --git a/backports/openterface-qt/use-system-libs.patch b/backports/openterface-qt/use-system-libs.patch deleted file mode 100644 index a220d5f..0000000 --- a/backports/openterface-qt/use-system-libs.patch +++ /dev/null @@ -1,72 +0,0 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index e0e8ea1..c861725 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -244,7 +244,7 @@ endif() - # Add XCB cursor library for static linking (Linux only) - Legacy support - if(UNIX AND NOT APPLE AND XCB_CURSOR_FOUND) - # This is redundant now but keeping for compatibility -- message(STATUS "XCB cursor already linked via static approach above") -+ target_link_libraries(openterfaceQT PRIVATE X11) - endif() - - # Add TurboJPEG if available -@@ -307,4 +307,4 @@ if(CMAKE_BUILD_TYPE STREQUAL "Release") - endif() - endif() - --# Qt components already found above -\ No newline at end of file -+# Qt components already found above -diff --git a/cmake/FFmpeg.cmake b/cmake/FFmpeg.cmake -index ef0699e..660e765 100644 ---- a/cmake/FFmpeg.cmake -+++ b/cmake/FFmpeg.cmake -@@ -19,7 +19,7 @@ if(NOT DEFINED FFMPEG_PREFIX) - if(WIN32) - set(FFMPEG_PREFIX "C:/ffmpeg-static" CACHE PATH "FFmpeg installation directory") - else() -- set(FFMPEG_PREFIX "/opt/ffmpeg" CACHE PATH "FFmpeg installation directory") -+ set(FFMPEG_PREFIX "/usr" CACHE PATH "FFmpeg installation directory") - endif() - message(STATUS "Using default FFMPEG_PREFIX: ${FFMPEG_PREFIX}") - endif() -@@ -116,7 +116,7 @@ if(NOT FFMPEG_FOUND) - message(STATUS "FFmpeg search paths: ${FFMPEG_SEARCH_PATHS}") - foreach(SEARCH_PATH ${FFMPEG_SEARCH_PATHS}) - # For static builds, prefer .a files; check common lib directories -- set(LIB_EXTENSIONS ".a") -+ set(LIB_EXTENSIONS ".so") - - # Platform-specific library paths - if(WIN32) -diff --git a/cmake/GStreamer.cmake b/cmake/GStreamer.cmake -index 220e9f5..576535f 100644 ---- a/cmake/GStreamer.cmake -+++ b/cmake/GStreamer.cmake -@@ -316,10 +316,11 @@ else() - # Check for Qt6 plugin availability in system - message(STATUS "Checking for Qt6 GStreamer plugin in system...") - find_file(GSTREAMER_QT6_PLUGIN -- NAMES libgstqt6.so -+ NAMES libgstqml6.so - PATHS - /usr/lib/x86_64-linux-gnu/gstreamer-1.0 - /usr/lib/aarch64-linux-gnu/gstreamer-1.0 -+ /usr/lib/gstreamer-1.0 - /usr/local/lib/gstreamer-1.0 - NO_DEFAULT_PATH - ) -diff --git a/cmake/Resources.cmake b/cmake/Resources.cmake -index 2d28b89..e2009e3 100644 ---- a/cmake/Resources.cmake -+++ b/cmake/Resources.cmake -@@ -336,7 +336,7 @@ install(FILES ${CMAKE_SOURCE_DIR}/com.openterface.openterfaceQT.metainfo.xml - if(COMMAND qt_generate_deploy_app_script) - qt_generate_deploy_app_script( - TARGET openterfaceQT -- FILENAME_VARIABLE deploy_script -+ OUTPUT_SCRIPT deploy_script - NO_UNSUPPORTED_PLATFORM_ERROR - ) - install(SCRIPT ${deploy_script}) diff --git a/backports/perl-math-random-isaac-xs/APKBUILD b/backports/perl-math-random-isaac-xs/APKBUILD new file mode 100644 index 0000000..4d27426 --- /dev/null +++ b/backports/perl-math-random-isaac-xs/APKBUILD @@ -0,0 +1,47 @@ +# Automatically generated by apkbuild-cpan, template 2 +# Contributor: Timo Teräs +# Maintainer: Timo Teräs +pkgname=perl-math-random-isaac-xs +_pkgreal=Math-Random-ISAAC-XS +pkgver=1.004 +pkgrel=7 +pkgdesc="C implementation of the ISAAC PRNG algorithm" +url="https://metacpan.org/release/Math-Random-ISAAC-XS/" +arch="all" +license="unrestricted" +cpandepends="" +cpanmakedepends="perl-test-nowarnings" +cpancheckdepends="" +depends="$cpandepends" +makedepends="perl-dev perl-module-build $cpanmakedepends" +checkdepends="$cpancheckdepends" +subpackages="$pkgname-doc" +source="https://cpan.metacpan.org/authors/id/J/JA/JAWNSY/$_pkgreal-$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" + +prepare() { + default_prepare || return 1 + + cd "$builddir" + export CFLAGS=$(perl -MConfig -E 'say $Config{ccflags}') + perl Build.PL installdirs=vendor || return 1 +} + +build() { + cd "$builddir" + export CFLAGS=$(perl -MConfig -E 'say $Config{ccflags}') + ./Build +} + +package() { + cd "$builddir" + ./Build install destdir="$pkgdir" || return 1 + find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete +} + +check() { + cd "$builddir" + ./Build test +} + +sha512sums="40c46b5f247f585a407ef9f36b5874d9cf03ec05963a9d92d988ebd63daf1e37b1b51308845d4596f47b5ad7203953bcb7fbb421c905b526dbe99b246ccb4d87 Math-Random-ISAAC-XS-1.004.tar.gz" diff --git a/backports/py3-apsw/APKBUILD b/backports/py3-apsw/APKBUILD index 62e95a7..1259ba3 100644 --- a/backports/py3-apsw/APKBUILD +++ b/backports/py3-apsw/APKBUILD @@ -2,8 +2,8 @@ # Maintainer: Francesco Colista pkgname=py3-apsw _pkgname=apsw -pkgver=3.50.4.0 -pkgrel=0 +pkgver=3.45.2.0 +pkgrel=1 pkgdesc="Another Python SQLite Wrapper" url="https://github.com/rogerbinns/apsw" arch="all" @@ -41,6 +41,6 @@ package() { } sha512sums=" -71db63b0a7f550c9a5d3f112d47c24953472cc6555f0b57198428997d5cf5acf73629f2da8d5d53a2473067ba19d4b655cce467a5e2267e5bd6e8cf0d9883579 py3-apsw-3.50.4.0.zip +0260f6479d5f1188ad172dfc0dd7e4a03c9d809d2f80c2296e587a19286681bb2ce759b0bd19ec6957e2902f18729b7e79410e4db79dff9918089f57dd510828 py3-apsw-3.45.2.0.zip 8f3957bd6fecb5660a7cab367043e4ccdacd87d8963bbe41cc3d525265de28f08aa207099658d785be29c5c90b818c1418f766995cd780d02b8e36252a389758 detect-sqlite-config.patch " diff --git a/backports/py3-arcus/APKBUILD b/backports/py3-arcus/APKBUILD new file mode 100644 index 0000000..0a04535 --- /dev/null +++ b/backports/py3-arcus/APKBUILD @@ -0,0 +1,42 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +pkgname=py3-arcus +# Needs to be upgraded in sync with libarcus +pkgver=5.3.0 +pkgrel=0 +pkgdesc="Python bindings for libarcus" +url="https://github.com/Ultimaker/pyArcus" +arch="all" +license="LGPL-3.0-only" +makedepends=" + cmake + libarcus-dev + protobuf-dev + py3-sip + python3-dev + samurai + " +options="!check" # package doesn't provide any tests +source="$pkgname-$pkgver.tar.gz::https://github.com/Ultimaker/pyArcus/archive/refs/tags/$pkgver.tar.gz + cmake.patch + cmake-helpers.patch + pyproject.patch" +builddir="$srcdir/pyArcus-$pkgver" + +build() { + cmake -G Ninja -B build \ + -DBUILD_SHARED_LIBS=ON \ + -DCMAKE_BUILD_TYPE=Release + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} + +sha512sums=" +d4a114994fa3e3156eae95dde58df13237b8bb0571a1219d6dee6b6338fd65f911f27887d6ab32b7a3cb32bc45ca6c25147e7c2d246cb0707326b88246abfbcd py3-arcus-5.3.0.tar.gz +f14e55cd31c13051981f26364e34da8c94e8eb5227b1cfd6fe44b9f97b5a4dcf6142a1751fa62eb0514a47583e6ec2d51dc253f23cf72c3fe6a1cb5dca136f21 cmake.patch +de75b985607feae0a9c511742915814e9c3d4bc467183f010ccc334ce4d0d952b6ff86020360b78558c4738cc03cf62c386b44ed76bcec12075c4a93dd03eeb7 cmake-helpers.patch +ef593230d5c78da8ba0fc6ea83225c4543857de1837d3151c45e59ffd7c98063b8f97f25d01c15b6a8f90c26c919206f9f7fa26c9650117f4ce7be49ebca876f pyproject.patch +" diff --git a/backports/py3-arcus/cmake-helpers.patch b/backports/py3-arcus/cmake-helpers.patch new file mode 100644 index 0000000..c556985 --- /dev/null +++ b/backports/py3-arcus/cmake-helpers.patch @@ -0,0 +1,254 @@ +--- /dev/null ++++ ./cmake/CMakeBuilder.py +@@ -0,0 +1,13 @@ ++from sipbuild import SetuptoolsBuilder ++ ++ ++class CMakeBuilder(SetuptoolsBuilder): ++ def __init__(self, project, **kwargs): ++ print("Using the CMake builder") ++ super().__init__(project, **kwargs) ++ ++ def build(self): ++ """ Only Generate the source files """ ++ print("Generating the source files") ++ self._generate_bindings() ++ self._generate_scripts() +--- /dev/null ++++ ./cmake/FindSIP.cmake +@@ -0,0 +1,65 @@ ++# Find SIP ++# ~~~~~~~~ ++# ++# SIP website: http://www.riverbankcomputing.co.uk/sip/index.php ++# ++# Find the installed version of SIP. FindSIP should be called after Python ++# has been found. ++# ++# This file defines the following variables: ++# ++# SIP_VERSION - The version of SIP found expressed as a 6 digit hex number ++# suitable for comparison as a string. ++# ++# SIP_VERSION_STR - The version of SIP found as a human readable string. ++# ++# SIP_BINARY_PATH - Path and filename of the SIP command line executable. ++# ++# SIP_INCLUDE_DIR - Directory holding the SIP C++ header file. ++# ++# SIP_DEFAULT_SIP_DIR - Default directory where .sip files should be installed ++# into. ++ ++# Copyright (c) 2007, Simon Edwards ++# Redistribution and use is allowed according to the terms of the BSD license. ++# For details see the accompanying COPYING-CMAKE-SCRIPTS file. ++ ++ ++ ++IF(SIP_VERSION OR SIP_BUILD_EXECUTABLE) ++ # Already in cache, be silent ++ SET(SIP_FOUND TRUE) ++ELSE() ++ ++ FIND_FILE(_find_sip_py FindSIP.py PATHS ${CMAKE_MODULE_PATH} NO_CMAKE_FIND_ROOT_PATH) ++ ++ EXECUTE_PROCESS(COMMAND ${Python_EXECUTABLE} ${_find_sip_py} OUTPUT_VARIABLE sip_config) ++ IF(sip_config) ++ STRING(REGEX REPLACE "^sip_version:([^\n]+).*$" "\\1" SIP_VERSION ${sip_config}) ++ STRING(REGEX REPLACE ".*\nsip_version_num:([^\n]+).*$" "\\1" SIP_VERSION_NUM ${sip_config}) ++ STRING(REGEX REPLACE ".*\nsip_version_str:([^\n]+).*$" "\\1" SIP_VERSION_STR ${sip_config}) ++ STRING(REGEX REPLACE ".*\ndefault_sip_dir:([^\n]+).*$" "\\1" SIP_DEFAULT_SIP_DIR ${sip_config}) ++ IF(${SIP_VERSION_STR} VERSION_LESS 5) ++ STRING(REGEX REPLACE ".*\nsip_bin:([^\n]+).*$" "\\1" SIP_BINARY_PATH ${sip_config}) ++ STRING(REGEX REPLACE ".*\nsip_inc_dir:([^\n]+).*$" "\\1" SIP_INCLUDE_DIR ${sip_config}) ++ STRING(REGEX REPLACE ".*\nsip_module_dir:([^\n]+).*$" "\\1" SIP_MODULE_DIR ${sip_config}) ++ ELSE(${SIP_VERSION_STR} VERSION_LESS 5) ++ FIND_PROGRAM(SIP_BUILD_EXECUTABLE sip-build) ++ ENDIF(${SIP_VERSION_STR} VERSION_LESS 5) ++ SET(SIP_FOUND TRUE) ++ ENDIF(sip_config) ++ ++ IF(SIP_FOUND) ++ IF(NOT SIP_FIND_QUIETLY) ++ MESSAGE(STATUS "Found SIP version: ${SIP_VERSION_STR}") ++ ENDIF(NOT SIP_FIND_QUIETLY) ++ ELSE(SIP_FOUND) ++ IF(SIP_FIND_REQUIRED) ++ MESSAGE(FATAL_ERROR "Could not find SIP") ++ ENDIF(SIP_FIND_REQUIRED) ++ ENDIF(SIP_FOUND) ++ ++ENDIF() ++ ++include(${CMAKE_SOURCE_DIR}/cmake/SIPMacros.cmake) ++ADD_DEFINITIONS(-DSIP_VERSION=0x${SIP_VERSION}) +--- /dev/null ++++ ./cmake/FindSIP.py +@@ -0,0 +1,57 @@ ++# -*- coding: utf-8 -*- ++# ++# Copyright (c) 2007, Simon Edwards ++# All rights reserved. ++# ++# Redistribution and use in source and binary forms, with or without ++# modification, are permitted provided that the following conditions are met: ++# * Redistributions of source code must retain the above copyright ++# notice, this list of conditions and the following disclaimer. ++# * Redistributions in binary form must reproduce the above copyright ++# notice, this list of conditions and the following disclaimer in the ++# documentation and/or other materials provided with the distribution. ++# * Neither the name of the Simon Edwards nor the ++# names of its contributors may be used to endorse or promote products ++# derived from this software without specific prior written permission. ++# ++# THIS SOFTWARE IS PROVIDED BY Simon Edwards ''AS IS'' AND ANY ++# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++# DISCLAIMED. IN NO EVENT SHALL Simon Edwards BE LIABLE FOR ANY ++# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ++# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ++# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++# ++# FindSIP.py ++# Copyright (c) 2007, Simon Edwards ++# Redistribution and use is allowed according to the terms of the BSD license. ++# For details see the accompanying COPYING-CMAKE-SCRIPTS file. ++ ++try: ++ import sipbuild ++ ++ print("sip_version:%06.0x" % sipbuild.version.SIP_VERSION) ++ print("sip_version_num:%d" % sipbuild.version.SIP_VERSION) ++ print("sip_version_str:%s" % sipbuild.version.SIP_VERSION_STR) ++ ++ from distutils.sysconfig import get_python_lib ++ python_modules_dir = get_python_lib(plat_specific=1) ++ print("default_sip_dir:%s" % python_modules_dir) ++except ImportError: # Code for SIP v4 ++ import sipconfig ++ ++ sipcfg = sipconfig.Configuration() ++ print("sip_version:%06.0x" % sipcfg.sip_version) ++ print("sip_version_num:%d" % sipcfg.sip_version) ++ print("sip_version_str:%s" % sipcfg.sip_version_str) ++ print("sip_bin:%s" % sipcfg.sip_bin) ++ print("default_sip_dir:%s" % sipcfg.default_sip_dir) ++ print("sip_inc_dir:%s" % sipcfg.sip_inc_dir) ++ # SIP 4.19.10+ has new sipcfg.sip_module_dir ++ if hasattr(sipcfg, "sip_module_dir"): ++ print("sip_module_dir:%s" % sipcfg.sip_module_dir) ++ else: ++ print("sip_module_dir:%s" % sipcfg.sip_mod_dir) +--- /dev/null ++++ ./cmake/SIPMacros.cmake +@@ -0,0 +1,107 @@ ++ ++ ++# Macros for SIP ++# ~~~~~~~~~~~~~~ ++ ++set(SIP_ARGS --pep484-pyi --no-protected-is-public) ++ ++function(add_sip_module MODULE_TARGET) ++ if(NOT SIP_BUILD_EXECUTABLE) ++ set(SIP_BUILD_EXECUTABLE ${CMAKE_PREFIX_PATH}/Scripts/sip-build) ++ endif() ++ ++ message(STATUS "SIP: Generating pyproject.toml") ++ configure_file(${CMAKE_SOURCE_DIR}/pyproject.toml.in ${CMAKE_CURRENT_BINARY_DIR}/pyproject.toml) ++ configure_file(${CMAKE_SOURCE_DIR}/cmake/CMakeBuilder.py ${CMAKE_CURRENT_BINARY_DIR}/CMakeBuilder.py) ++ if(WIN32) ++ set(ext .pyd) ++ set(env_path_sep ";") ++ else() ++ set(ext .so) ++ set(env_path_sep ":") ++ endif() ++ ++ message(STATUS "SIP: Generating source files") ++ execute_process( ++ COMMAND ${CMAKE_COMMAND} -E env "PYTHONPATH=${PYTHONPATH}${env_path_sep}$ENV{PYTHONPATH}${env_path_sep}${CMAKE_CURRENT_BINARY_DIR}" ${SIP_BUILD_EXECUTABLE} ${SIP_ARGS} ++ COMMAND_ECHO STDOUT ++ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ ++ ) ++ # This will generate the source-files during the configuration step in CMake. Needed to obtain the sources ++ ++ # Touch the generated files (8 in total) to make them dirty and force them to rebuild ++ message(STATUS "SIP: Touching the source files") ++ set(_sip_output_files) ++ list(LENGTH SIP_FILES _no_outputfiles) ++ foreach(_concat_file_nr RANGE 0 ${_no_outputfiles}) ++ if(${_concat_file_nr} LESS 8) ++ list(APPEND _sip_output_files "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/sip${MODULE_TARGET}part${_concat_file_nr}.cpp") ++ endif() ++ endforeach() ++ ++ # Find the generated source files ++ message(STATUS "SIP: Collecting the generated source files") ++ file(GLOB sip_c "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/*.c") ++ file(GLOB sip_cpp "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/*.cpp") ++ file(GLOB sip_hdr "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/*.h") ++ ++ # Add the user specified source files ++ message(STATUS "SIP: Collecting the user specified source files") ++ get_target_property(usr_src ${MODULE_TARGET} SOURCES) ++ ++ # create the target library and link all the files (generated and user specified ++ message(STATUS "SIP: Linking the interface target against the shared library") ++ set(sip_sources "${sip_c}" "${sip_cpp}" "${usr_src}") ++ ++ if (BUILD_SHARED_LIBS) ++ add_library("sip_${MODULE_TARGET}" SHARED ${sip_sources}) ++ else() ++ add_library("sip_${MODULE_TARGET}" STATIC ${sip_sources}) ++ endif() ++ ++ # Make sure that the library name of the target is the same as the MODULE_TARGET with the appropriate extension ++ target_link_libraries("sip_${MODULE_TARGET}" PRIVATE "${MODULE_TARGET}") ++ set_target_properties("sip_${MODULE_TARGET}" PROPERTIES PREFIX "") ++ set_target_properties("sip_${MODULE_TARGET}" PROPERTIES SUFFIX ${ext}) ++ set_target_properties("sip_${MODULE_TARGET}" PROPERTIES OUTPUT_NAME "${MODULE_TARGET}") ++ ++ # Add the custom command to (re-)generate the files and mark them as dirty. This allows the user to actually work ++ # on the sip definition files without having to reconfigure the complete project. ++ if (NOT DEFINED PYTHONPATH) ++ set(PYTHONPATH "") ++ endif () ++ add_custom_command( ++ TARGET "sip_${MODULE_TARGET}" ++ COMMAND ${CMAKE_COMMAND} -E env "PYTHONPATH=${PYTHONPATH}${env_path_sep}$ENV{PYTHONPATH}${env_path_sep}${CMAKE_CURRENT_BINARY_DIR}" ${SIP_BUILD_EXECUTABLE} ${SIP_ARGS} ++ COMMAND ${CMAKE_COMMAND} -E touch ${_sip_output_files} ++ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ ++ MAIN_DEPENDENCY ${MODULE_SIP} ++ DEPENDS ${sip_sources} ++ VERBATIM ++ ) ++ ++ set_target_properties("sip_${MODULE_TARGET}" ++ PROPERTIES ++ RESOURCE "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/${MODULE_TARGET}.pyi") ++endfunction() ++ ++function(install_sip_module MODULE_TARGET) ++ if(DEFINED ARGV1) ++ set(_install_path ${ARGV1}) ++ else() ++ if(DEFINED Python_SITEARCH) ++ set(_install_path ${Python_SITEARCH}) ++ elseif(DEFINED Python_SITELIB) ++ set(_install_path ${Python_SITELIB}) ++ else() ++ message(FATAL_ERROR "SIP: Specify the site-packages location") ++ endif() ++ endif() ++ message(STATUS "SIP: Installing Python module and PEP 484 file in ${_install_path}") ++ install(TARGETS "sip_${MODULE_TARGET}" ++ ARCHIVE DESTINATION ${_install_path} ++ LIBRARY DESTINATION ${_install_path} ++ RUNTIME DESTINATION ${_install_path} ++ RESOURCE DESTINATION ${_install_path} ++ ) ++endfunction() diff --git a/backports/py3-arcus/cmake.patch b/backports/py3-arcus/cmake.patch new file mode 100644 index 0000000..e7390e0 --- /dev/null +++ b/backports/py3-arcus/cmake.patch @@ -0,0 +1,32 @@ +--- ./CMakeLists.txt.orig ++++ ./CMakeLists.txt +@@ -2,22 +2,22 @@ + project(pyarcus) + cmake_minimum_required(VERSION 3.20) + +-find_package(protobuf REQUIRED) +-find_package(cpython REQUIRED) +-find_package(arcus REQUIRED) ++list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) + +-find_package(standardprojectsettings REQUIRED) +-find_package(sipbuildtool REQUIRED) ++find_package(Protobuf REQUIRED) ++find_package(Python REQUIRED COMPONENTS Interpreter Development) ++find_package(Arcus REQUIRED) + ++find_package(SIP 6.5.0 REQUIRED) ++ + add_library(pyArcus INTERFACE src/PythonMessage.cpp) +-use_threads(pyArcus) + + target_include_directories(pyArcus + INTERFACE + $ + $ + ) +-target_link_libraries(pyArcus INTERFACE arcus::arcus protobuf::libprotobuf cpython::cpython) ++target_link_libraries(pyArcus INTERFACE Arcus protobuf::libprotobuf Python::Python) + add_sip_module(pyArcus) + install_sip_module(pyArcus) + diff --git a/backports/py3-arcus/pyproject.patch b/backports/py3-arcus/pyproject.patch new file mode 100644 index 0000000..3dd7f3a --- /dev/null +++ b/backports/py3-arcus/pyproject.patch @@ -0,0 +1,20 @@ +--- /dev/null ++++ ./pyproject.toml.in +@@ -0,0 +1,17 @@ ++[build-system] ++requires = ["sip >=6, <7"] ++build-backend = "sipbuild.api" ++ ++[tool.sip.metadata] ++name = "pyArcus" ++ ++[tool.sip.project] ++builder-factory = "CMakeBuilder" ++sip-files-dir = "${CMAKE_CURRENT_SOURCE_DIR}/python/" ++sip-include-dirs = ["CMAKE_CURRENT_SOURCE_DIR/python/"] ++build-dir = "${CMAKE_CURRENT_BINARY_DIR}/pyArcus/" ++ ++[tool.sip.bindings.pyArcus] ++exceptions = true ++release-gil = true ++concatenate = 8 diff --git a/backports/py3-colored/APKBUILD b/backports/py3-colored/APKBUILD new file mode 100644 index 0000000..d11a554 --- /dev/null +++ b/backports/py3-colored/APKBUILD @@ -0,0 +1,28 @@ +# Maintainer: Hoang Nguyen +pkgname=py3-colored +_pyname=${pkgname/py3-/} +pkgver=1.4.4 +pkgrel=2 +pkgdesc="Simple Python library for color and formatting in terminal" +url="https://gitlab.com/dslackw/colored" +arch="noarch" +license="MIT" +depends="python3" +makedepends="py3-setuptools" +checkdepends="py3-pytest" +subpackages="$pkgname-pyc" +source="https://gitlab.com/dslackw/colored/-/archive/$pkgver/colored-$pkgver.tar.gz" +builddir="$srcdir/$_pyname-$pkgver" +options="!check" # No testsuite + +build() { + python3 setup.py build +} + +package() { + python3 setup.py install --prefix=/usr --root="$pkgdir" +} + +sha512sums=" +d49075f97bcc220802a8a64780b4c3910acd420e7e0e82ee71659132e7a294a638b098e4e46ae54f531739f8a43cd35979e521c02bb359205a13d96e37cfe8ed colored-1.4.4.tar.gz +" diff --git a/backports/py3-daemon/APKBUILD b/backports/py3-daemon/APKBUILD new file mode 100644 index 0000000..416cd99 --- /dev/null +++ b/backports/py3-daemon/APKBUILD @@ -0,0 +1,40 @@ +# Contributor: Noel Kuntze +# Maintainer: Noel Kuntze +pkgname=py3-daemon +pkgver=2.3.2 +pkgrel=4 +pkgdesc="Library to implement a well-behaved Unix daemon process" +url="https://pagure.io/python-daemon" +options="!check" # Has lots of dependencies +arch="noarch" +license="Apache-2.0 AND GPL-3.0-or-later" +depends="py3-setuptools py3-lockfile" +makedepends="py3-docutils" +subpackages="$pkgname-pyc" +source=" + https://pypi.io/packages/source/p/python-daemon/python-daemon-$pkgver.tar.gz + remove-docutils-depend.patch +" +builddir="$srcdir/python-daemon-$pkgver" + +prepare() { + default_prepare + + # Remove unnecessary dependency for building, twine is + # required for uploading the package to pypi which we don't + # do + sed -e '/twine/d' -i setup.py +} + +build() { + python3 setup.py build +} + +package() { + python3 setup.py install --root="$pkgdir" +} + +sha512sums=" +d9f6e6c376a496fae96bd9efed0a56d00a137617a3d1d5ef74802ef176bc813bb1d49bbb9164cdbec03213529f944b32b257bcc64283abfa4a3522ff00826bfd python-daemon-2.3.2.tar.gz +20bc4bce7fba9754d1c9bca298f9b4ff7fe90ecf51769df2020912f370650a5997f91c99c6be2ecffed10a6b359a29b1f64b0c391772451eb3c04769df381015 remove-docutils-depend.patch +" diff --git a/backports/py3-daemon/remove-docutils-depend.patch b/backports/py3-daemon/remove-docutils-depend.patch new file mode 100644 index 0000000..2bbc3be --- /dev/null +++ b/backports/py3-daemon/remove-docutils-depend.patch @@ -0,0 +1,16 @@ +diff --git a/setup.py.orig b/setup.py +index 24f0e7cb98a..d712294c20b 100644 +--- a/setup.py.orig ++++ b/setup.py +@@ -96,11 +96,6 @@ setup_kwargs = dict( + ], + ) + +-# Docutils is only required for building, but Setuptools can't distinguish +-# dependencies properly. +-# See . +-setup_kwargs['install_requires'].append("docutils") +- + + if __name__ == '__main__': + setup(**setup_kwargs) diff --git a/backports/py3-dateparser/APKBUILD b/backports/py3-dateparser/APKBUILD new file mode 100644 index 0000000..6a342fb --- /dev/null +++ b/backports/py3-dateparser/APKBUILD @@ -0,0 +1,68 @@ +# Maintainer: Hoang Nguyen +pkgname=py3-dateparser +_pyname=${pkgname#py3-} +pkgver=1.2.0 +pkgrel=1 +pkgdesc="Python parser for human readable dates" +url="https://github.com/scrapinghub/dateparser" +arch="noarch" +license="BSD-3-Clause" +depends=" + python3 + py3-dateutil + py3-regex + py3-tz + py3-tzlocal + " +makedepends=" + py3-gpep517 + py3-setuptools + py3-wheel + " +checkdepends=" + py3-fasttext + py3-gitpython + py3-langdetect + py3-parameterized + py3-parsel + py3-pytest + py3-requests + py3-ruamel.yaml + " +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://github.com/scrapinghub/dateparser/archive/refs/tags/v$pkgver.tar.gz" +builddir="$srcdir/$_pyname-$pkgver" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + _test_filter='not test_parsing_date_should_fail_using_datetime_strptime_if_locale_is_non_english' + # test_custom_language_detect_fast_text fails due to wrong file format + case "$CARCH" in + s390x) + _test_filter="$_test_filter and not test_custom_language_detect_fast_text" + ;; + esac + + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + + # test_hijri.py: needs hijri_converter, test_jalali.py: convertdate + .testenv/bin/python3 -m pytest tests \ + -k "$_test_filter" \ + --ignore tests/test_hijri.py \ + --ignore tests/test_jalali.py +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +2d37115f25c2076c4521b77b89ef1cff3cd0a5233c45beb00d78a5c9b1a384dcd993ff7cdd1f77db95a53ce566cf7d709d46ffa2e63eb468ac954fda178a5b6e py3-dateparser-1.2.0.tar.gz +" diff --git a/backports/py3-django-debug-toolbar/APKBUILD b/backports/py3-django-debug-toolbar/APKBUILD new file mode 100644 index 0000000..b0974d3 --- /dev/null +++ b/backports/py3-django-debug-toolbar/APKBUILD @@ -0,0 +1,38 @@ +# Contributor: Leonardo Arena +# Maintainer: Will Sinatra +pkgname=py3-django-debug-toolbar +_pkgname=django-debug-toolbar +pkgver=4.3 +pkgrel=1 +pkgdesc="Configurable set of panels that display various debug information about the current request/response" +options="!check" # Requires unpackaged Selenium python3 module +url="https://github.com/jazzband/django-debug-toolbar" +arch="noarch" +license="BSD-3-Clause" +depends="py3-django py3-sqlparse" +makedepends=" + py3-gpep517 + py3-hatchling + " +# options="!check" #no testsuite +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://github.com/jazzband/$_pkgname/archive/$pkgver.tar.gz" +builddir="$srcdir"/$_pkgname-$pkgver + +replaces="py-django-debug-toolbar" # Backwards compatibility +provides="py-django-debug-toolbar=$pkgver-r$pkgrel" # Backwards compatibility + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +caa8563d38e8c96305828b7a07006ce2ee0afae099d70d75d332f2196fc3ffcf7f3848440ea22c00f2b918029477672a172e30714f6f73a630404175aef3b925 py3-django-debug-toolbar-4.3.tar.gz +" diff --git a/backports/py3-flask-httpauth/APKBUILD b/backports/py3-flask-httpauth/APKBUILD deleted file mode 100644 index 7cbc2de..0000000 --- a/backports/py3-flask-httpauth/APKBUILD +++ /dev/null @@ -1,39 +0,0 @@ -# Contributor: Fabian Affolter -# Maintainer: Fabian Affolter -pkgname=py3-flask-httpauth -pkgver=4.8.0 -pkgrel=3 -pkgdesc="Basic and Digest HTTP authentication for Flask routes" -url="https://pypi.org/project/Flask-HTTPAuth" -arch="noarch" -license="MIT" -depends="py3-flask python3" -makedepends="py3-gpep517 py3-setuptools py3-wheel" -checkdepends="py3-pytest py3-pytest-asyncio py3-asgiref" -subpackages="$pkgname-pyc" -source="https://files.pythonhosted.org/packages/source/F/Flask-HTTPAuth/Flask-HTTPAuth-$pkgver.tar.gz" -builddir="$srcdir"/Flask-HTTPAuth-$pkgver - -replaces="py-flask-httpauth" # Backwards compatibility -provides="py-flask-httpauth=$pkgver-r$pkgrel" # Backwards compatibility - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - .testenv/bin/python3 -m installer .dist/*.whl - .testenv/bin/python3 -m pytest -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/flask_httpauth*.whl -} - -sha512sums=" -15878f45faf6bdde43d7b588539b044d621ba1ba590880e3d0a3bccf4e9bd04b898b3372775e99577b7e7955c4b6d2d7cc80df19ba30415c6b7c1d3183b7e5f4 Flask-HTTPAuth-4.8.0.tar.gz -" diff --git a/backports/py3-flask-limiter/APKBUILD b/backports/py3-flask-limiter/APKBUILD index cd15f22..9555218 100644 --- a/backports/py3-flask-limiter/APKBUILD +++ b/backports/py3-flask-limiter/APKBUILD @@ -1,7 +1,7 @@ # Contributor: lauren n. liberda -maintainer="lauren n. liberda " +# Maintainer: lauren n. liberda pkgname=py3-flask-limiter -pkgver=3.10.1 +pkgver=3.7.0 pkgrel=0 pkgdesc="Rate Limiting extension for Flask" url="https://github.com/alisaifee/flask-limiter" @@ -14,7 +14,7 @@ depends=" py3-rich python3 " -makedepends="py3-setuptools py3-gpep517" +makedepends="py3-setuptools" checkdepends=" py3-flask-restful py3-flask-restx @@ -23,6 +23,7 @@ checkdepends=" py3-pytest py3-pytest-cov " +options="!check" # tests depend on unpackaged modules subpackages="$pkgname-pyc" source=" https://github.com/alisaifee/flask-limiter/archive/refs/tags/$pkgver/flask-limiter-$pkgver.tar.gz @@ -30,26 +31,20 @@ source=" our-std-is-good-enough.patch " builddir="$srcdir/flask-limiter-$pkgver" -options="!check" # tests depend on unpackaged modules build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 + python3 setup.py build } check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - gpep517 install-wheel --destdir .testenv --prefix '' .dist/*.whl - .testenv/bin/python3 -m pytest + pytest } package() { - gpep517 install-wheel --destdir "$pkgdir" \ - .dist/*.whl + python3 setup.py install --prefix=/usr --root="$pkgdir" } sha512sums=" -a0d3af6f93d4283309d6df46ddb7fed4c358bbc712c2bd9e6897362c6d086c395cb9587c3d9da283ad757b574fd8c09d909f3c4b76d02ae8aade3e61dbea6aa0 flask-limiter-3.10.1.tar.gz +f546536e3efb86571515aac5b578155c240049fb1ccf96e55d4b1814d9e227e41cc18fc587f115706606154bb12a84b381533cf069cdfc56453b0f170ec19449 flask-limiter-3.7.0.tar.gz 1b90e9134076cda249695d5ea741db9d205a2ae452c7d6edfe01eb37a221ce6f64b0e8ddcdbbee9b0e0fb16a28e5eabf14f1c1e41e965c7e3b93ea4f42caf553 our-std-is-good-enough.patch " diff --git a/backports/py3-fuzzywuzzy/APKBUILD b/backports/py3-fuzzywuzzy/APKBUILD new file mode 100644 index 0000000..ad0fce2 --- /dev/null +++ b/backports/py3-fuzzywuzzy/APKBUILD @@ -0,0 +1,32 @@ +# Contributor: Galen Abell +# Maintainer: Galen Abell +pkgname=py3-fuzzywuzzy +_pyname=fuzzywuzzy +pkgver=0.18.0 +pkgrel=6 +pkgdesc="Fuzzy string matching in python" +url="https://github.com/seatgeek/fuzzywuzzy" +arch="noarch" +license="GPL-2.0-only" +depends="python3 py3-levenshtein" +makedepends="py3-setuptools" +checkdepends="py3-pytest py3-pycodestyle py3-hypothesis" +subpackages="$pkgname-pyc" +source="https://files.pythonhosted.org/packages/source/${_pyname%${_pyname#?}}/$_pyname/$_pyname-$pkgver.tar.gz" +builddir="$srcdir/$_pyname-$pkgver" + +build() { + python3 setup.py build +} + +check() { + PYTHONPATH="$PWD/build/lib" pytest -v +} + +package() { + python3 setup.py install --skip-build --root="$pkgdir" +} + +sha512sums=" +4a21ea67278fa525842d48fed8db666d00eae6d13254e8844d11f63b47c3a305b3cac760f28c24c6347aebcf73e96180e0a7cfba29c75f01ece2f7751e0398c5 fuzzywuzzy-0.18.0.tar.gz +" diff --git a/backports/py3-levenshtein/APKBUILD b/backports/py3-levenshtein/APKBUILD new file mode 100644 index 0000000..c146867 --- /dev/null +++ b/backports/py3-levenshtein/APKBUILD @@ -0,0 +1,45 @@ +# Contributor: Galen Abell +# Maintainer: Galen Abell +pkgname=py3-levenshtein +pkgver=0.25.1 +pkgrel=2 +pkgdesc="Python extension for computing string edit distances and similarities" +url="https://github.com/maxbachmann/Levenshtein" +arch="all" +license="GPL-2.0-only" +depends="py3-rapidfuzz" +makedepends=" + cmake + cython + py3-gpep517 + py3-scikit-build + python3-dev + rapidfuzz + samurai + " +checkdepends="py3-pytest" +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://github.com/maxbachmann/Levenshtein/archive/refs/tags/v$pkgver.tar.gz" +builddir="$srcdir/Levenshtein-$pkgver" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer \ + .dist/Levenshtein*.whl + .testenv/bin/python3 -m pytest +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/Levenshtein*.whl +} + +sha512sums=" +936dab36b15df6f2ee5425efb1fdb1490fb8f618ba453f464a6dd615bcc427e55ceee7474f06b34392871d9f38470b853602a11d8f9776eee66ec34156511ca4 py3-levenshtein-0.25.1.tar.gz +" diff --git a/backports/py3-limits/APKBUILD b/backports/py3-limits/APKBUILD index af4516d..ed4a82e 100644 --- a/backports/py3-limits/APKBUILD +++ b/backports/py3-limits/APKBUILD @@ -1,7 +1,7 @@ # Contributor: lauren n. liberda # Maintainer: lauren n. liberda pkgname=py3-limits -pkgver=3.14.1 +pkgver=3.12.0 pkgrel=0 pkgdesc="Rate limiting using various strategies and storage backends such as redis & memcached" url="https://github.com/alisaifee/limits" @@ -11,7 +11,7 @@ depends=" py3-deprecated python3 " -makedepends="py3-setuptools py3-gpep517" +makedepends="py3-setuptools" checkdepends=" py3-flaky py3-mongo @@ -19,40 +19,32 @@ checkdepends=" py3-pytest-asyncio py3-pytest-benchmark py3-pytest-cov - py3-pytest-lazy-fixtures - py3-pymemcache py3-redis " subpackages="$pkgname-pyc" +options="!check" # most tests are integration with db connections, assume all connectors installed source=" https://github.com/alisaifee/limits/archive/refs/tags/$pkgver/limits-$pkgver.tar.gz our-std-is-good-enough.patch - tests-drop-etcd3-and-k-argument.patch " builddir="$srcdir/limits-$pkgver" build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 + python3 setup.py build } check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - gpep517 install-wheel --destdir .testenv --prefix '' .dist/*.whl - .testenv/bin/python3 -m pytest -W ignore::DeprecationWarning \ + pytest \ -m 'not benchmark and not etcd and not integration and not memcached' \ -k 'not aio and not Storage and not strategy' -v } package() { - gpep517 install-wheel --destdir "$pkgdir" \ - .dist/*.whl + python3 setup.py install --prefix=/usr --root="$pkgdir" } sha512sums=" -f30c7ec19c2d1edad9ed77dc590ae35717efa3956a4d97e465793e1923a4af08dc9921d90ee95d3c54ce3364b867ca67a9de62c61d627e07a3f50da20bdabd0f limits-3.14.1.tar.gz -271e3b0501f9f144eda8d2e96c93b285714e339b9217385e38cdbce1f4dec88f9c949e9419f8be94885092e7977f7dca29b86b5499e9fead678b42a686c337db our-std-is-good-enough.patch -e84f4db49349a6feba0f701b9d4357c5f66d64c4a23f8ce512528b0f44b5bbef55041c02d92aae3a4cc8d5340846f9e909217beb869a5aeb49df166dd29ae9e3 tests-drop-etcd3-and-k-argument.patch +2803dc26b18015e177342ed89e879f4dd680908579c99f9069d695edfa2beb3008b5bc47454ea2120a425bbcbc8a08928ab93a3058b33e11a2ae29431dfd9cd1 limits-3.12.0.tar.gz +0364d51f9f879b95c6a4a3c9e9fd3d7d1e15ea214c50ae98cd36826b8c0b2d903cf1128741ac83738e305a207dae8955a0b2c8679484d2d6643e334595bdb1d7 our-std-is-good-enough.patch " diff --git a/backports/py3-limits/our-std-is-good-enough.patch b/backports/py3-limits/our-std-is-good-enough.patch index 32d7d73..94c0c30 100644 --- a/backports/py3-limits/our-std-is-good-enough.patch +++ b/backports/py3-limits/our-std-is-good-enough.patch @@ -1,3 +1,14 @@ +--- ./limits/util.py.orig ++++ ./limits/util.py +@@ -8,7 +8,7 @@ + from types import ModuleType + from typing import TYPE_CHECKING, cast + +-import importlib_resources ++from importlib import resources as importlib_resources + from packaging.version import Version + + from limits.typing import Dict, List, NamedTuple, Optional, Tuple, Type, Union --- ./limits/typing.py.orig +++ ./limits/typing.py @@ -13,7 +13,7 @@ @@ -8,4 +19,4 @@ +from typing import ClassVar, Counter, ParamSpec, Protocol, TypeAlias Serializable = Union[int, str, float] - + diff --git a/backports/py3-limits/tests-drop-etcd3-and-k-argument.patch b/backports/py3-limits/tests-drop-etcd3-and-k-argument.patch deleted file mode 100644 index cab3a06..0000000 --- a/backports/py3-limits/tests-drop-etcd3-and-k-argument.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff --git a/tests/conftest.py.orig b/tests/conftest.py -index 2aeb758dda6..a9b2b8b2bd1 100644 ---- a/tests/conftest.py.orig -+++ b/tests/conftest.py -@@ -3,7 +3,6 @@ import platform - import socket - import time - --import etcd3 - import pymemcache - import pymemcache.client - import pymongo -diff --git a/pytest.ini.orig b/pytest.ini -index 38c40a713d0..8c6659e21c2 100644 ---- a/pytest.ini.orig -+++ b/pytest.ini -@@ -17,7 +17,6 @@ addopts = - -rfEsxX - --cov=limits - -m "not benchmark" -- -K - filterwarnings = - error - module::ResourceWarning diff --git a/backports/py3-mapbox-earcut/APKBUILD b/backports/py3-mapbox-earcut/APKBUILD new file mode 100644 index 0000000..99db5b5 --- /dev/null +++ b/backports/py3-mapbox-earcut/APKBUILD @@ -0,0 +1,32 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +pkgname=py3-mapbox-earcut +pkgver=1.0.1 +pkgrel=0 +pkgdesc="Python bindings for the mapbox earcut c++ library" +url="https://github.com/skogler/mapbox_earcut_python" +arch="all" +license="ISC" +depends="py3-numpy" +makedepends="py3-setuptools py3-pybind11-dev python3-dev" +checkdepends="pytest" +source="$pkgname-$pkgver.tar.gz::https://github.com/skogler/mapbox_earcut_python/archive/refs/tags/v$pkgver.tar.gz" +builddir="$srcdir/mapbox_earcut_python-$pkgver" + +build() { + python3 setup.py build +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages test-env + test-env/bin/python3 setup.py install + test-env/bin/python3 -m pytest +} + +package() { + python3 setup.py install --skip-build --root="$pkgdir" +} + +sha512sums=" +cdb32585cbaf74c15e59af0ae70d983dd2f9bc9cfe1b59b3eadc4d442f7d962241854b589a035deae67cacd9334833b911d0981f0d417fe587348fc7d24f0c0a py3-mapbox-earcut-1.0.1.tar.gz +" diff --git a/backports/py3-microdata/APKBUILD b/backports/py3-microdata/APKBUILD new file mode 100644 index 0000000..ecc0268 --- /dev/null +++ b/backports/py3-microdata/APKBUILD @@ -0,0 +1,37 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-microdata +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=microdata +pkgver=0.8.0 +pkgrel=0 +pkgdesc="html5lib extension for parsing microdata" +url="https://pypi.python.org/project/microdata" +license="CC0-1.0" +arch="noarch" +depends="py3-html5lib" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source="$pkgname-$pkgver.tar.gz::https://github.com/edsu/microdata/archive/refs/tags/v$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + .testenv/bin/python3 setup.py test +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +e48c8c267f595faec97397fae470a3aa1f4f33d9f4ea7d186f07b104166b373ea768db7d73423aedd28af3e310f6b9fa268d946420c6aed9676d15f38396b07e py3-microdata-0.8.0.tar.gz +" diff --git a/backports/py3-numpy-stl/APKBUILD b/backports/py3-numpy-stl/APKBUILD new file mode 100644 index 0000000..6ef430b --- /dev/null +++ b/backports/py3-numpy-stl/APKBUILD @@ -0,0 +1,34 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +pkgname=py3-numpy-stl +pkgver=3.0.1 +pkgrel=2 +pkgdesc="Library for working with STLs" +url="https://github.com/WoLpH/numpy-stl" +# s390x: no py3-utils +arch="noarch !s390x" +license="BSD-3-Clause" +depends="python3 py3-utils py3-numpy" +makedepends="py3-setuptools" +checkdepends="py3-pytest" +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://github.com/wolph/numpy-stl/releases/download/v$pkgver/numpy-stl-$pkgver.tar.gz" +builddir="$srcdir/numpy-stl-$pkgver" + +build() { + python3 setup.py build +} + +check() { + # deselected test needs xvfb-run and fails + pytest \ + --deselect tests/test_ascii.py::test_use_with_qt_with_custom_locale_decimal_delimeter +} + +package() { + python3 setup.py install --skip-build --root="$pkgdir" +} + +sha512sums=" +d01abb8f54738600ce36c8c44e1392957061030e7accbbfa0352aea4a904323a96712099146b311ce9518f243317c25c47cfb30930469602c0ad439de9f43c5f py3-numpy-stl-3.0.1.tar.gz +" diff --git a/backports/py3-pathvalidate/APKBUILD b/backports/py3-pathvalidate/APKBUILD new file mode 100644 index 0000000..6ea6d42 --- /dev/null +++ b/backports/py3-pathvalidate/APKBUILD @@ -0,0 +1,35 @@ +# Contributor: lauren n. liberda +# Maintainer: lauren n. liberda +pkgname=py3-pathvalidate +pkgver=3.2.0 +pkgrel=1 +pkgdesc="Python library to sanitize/validate a string such as filenames/file-paths/etc" +url="https://github.com/thombashi/pathvalidate" +arch="noarch" +license="MIT" +depends="python3" +makedepends=" + py3-gpep517 + py3-setuptools + py3-wheel + " +checkdepends="py3-pytest py3-click py3-faker" +options="!check" # tests require unpackaged unmaintained dependencies +subpackages="$pkgname-pyc" +source="https://github.com/thombashi/pathvalidate/archive/refs/tags/v$pkgver/pathvalidate-$pkgver.tar.gz" +builddir="$srcdir/pathvalidate-$pkgver" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +d1b0e49028bc5497558d9a0c15b4e3c301cacb439bebccffc467fc23001854877dbc81a214cc6eb34c5a905a88c4f9394f5865a4de42f354b2450a3bfe10bb9e pathvalidate-3.2.0.tar.gz +" diff --git a/backports/py3-pivy/APKBUILD b/backports/py3-pivy/APKBUILD new file mode 100644 index 0000000..86d3112 --- /dev/null +++ b/backports/py3-pivy/APKBUILD @@ -0,0 +1,36 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +pkgname=py3-pivy +pkgver=0.6.9_alpha0 +pkgrel=0 +pkgdesc="Python3 bindings for coin" +url="https://github.com/coin3d/pivy" +# riscv64 blocked by py3-pyside6 +arch="all !riscv64" +license="ISC" +depends="py3-pyside6" +makedepends="swig soqt-dev qt6-qtbase-dev python3-dev glu-dev cmake samurai" +checkdepends="py3-pytest" +options="!check" # test suite is interactive and requires full installation +source="$pkgname-$pkgver.tar.gz::https://github.com/coin3d/pivy/archive/refs/tags/${pkgver//_alpha/.a}.tar.gz" +builddir="$srcdir/pivy-${pkgver//_alpha/.a}" + +build() { + if [ "$CBUILD" != "$CHOST" ]; then + CMAKE_CROSSOPTS="-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_HOST_SYSTEM_NAME=Linux" + fi + cmake -B build -G Ninja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_SHARED_LIBS=True \ + -DCMAKE_BUILD_TYPE=None \ + $CMAKE_CROSSOPTS + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} + +sha512sums=" +1bfefd58d2921c8be170a97efa30cad53b01f636ea0cf236acca242be4f691669a4c310cd61c64d3e0c55e55e8be96d36945cd244380ddc0b3a06170d0f8b691 py3-pivy-0.6.9_alpha0.tar.gz +" diff --git a/backports/py3-pyinstrument/APKBUILD b/backports/py3-pyinstrument/APKBUILD new file mode 100644 index 0000000..50f4f80 --- /dev/null +++ b/backports/py3-pyinstrument/APKBUILD @@ -0,0 +1,35 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +pkgname=py3-pyinstrument +pkgver=4.6.2 +pkgrel=1 +pkgdesc="Call stack profiler for Python" +url="https://github.com/joerick/pyinstrument" +arch="all" +license="BSD-3-Clause" +makedepends="py3-gpep517 py3-setuptools py3-wheel python3-dev" +checkdepends="py3-pytest py3-flaky py3-trio py3-greenlet" +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://github.com/joerick/pyinstrument/archive/refs/tags/v$pkgver.tar.gz" +builddir="$srcdir/pyinstrument-$pkgver" +options="!check" # currently not working + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + .testenv/bin/python3 -m pytest +} + +package() { + python3 -m installer -d "$pkgdir" .dist/*.whl +} + +sha512sums=" +da23988e6c68876cb8920ce284326f349425303ae36718c5c479b72b5f5ca5d48ced1674bcab71851f60e81a0985bb668bfa89a8b96cc20a1faa0dd7e623ec50 py3-pyinstrument-4.6.2.tar.gz +" diff --git a/backports/py3-pynest2d/APKBUILD b/backports/py3-pynest2d/APKBUILD new file mode 100644 index 0000000..357a1c3 --- /dev/null +++ b/backports/py3-pynest2d/APKBUILD @@ -0,0 +1,49 @@ +# Contributor: Anjandev Momi +# Maintainer: Anjandev Momi +pkgname=py3-pynest2d +pkgver=5.2.2 +pkgrel=4 +pkgdesc="Python bindings for libnest2d" +url="https://github.com/Ultimaker/pynest2d" +arch="all" +license="LGPL-3.0-or-later" +makedepends="samurai cmake libnest2d-dev clipper-dev py3-sip nlopt-dev boost-dev python3-dev" +source="$pkgname-$pkgver.tar.gz::https://github.com/Ultimaker/pynest2d/archive/refs/tags/$pkgver.tar.gz + cmake.patch + cmake-helpers.patch + pyproject.patch" +builddir="$srcdir/pynest2d-$pkgver" +options="!check" # doesn't seem like tests are packaged anymore + +prepare() { + mv ./python ./src + default_prepare +} + +build() { + if [ "$CBUILD" != "$CHOST" ]; then + CMAKE_CROSSOPTS="-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_HOST_SYSTEM_NAME=Linux" + fi + cmake -B build -G Ninja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_SHARED_LIBS=True \ + -DCMAKE_BUILD_TYPE=Release \ + $CMAKE_CROSSOPTS + cmake --build build +} + +check() { + cd build + CTEST_OUTPUT_ON_FAILURE=TRUE ctest +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} + +sha512sums=" +f5d701e431c81f8d2da7b14ca5677d3303064cf7910e80d289d7ff8fe99117fb9c470242f25f21fa8e1f064c63accf5349f4956981e316b09b14342223f79b61 py3-pynest2d-5.2.2.tar.gz +c8133d221a2fd8ed5fb32933a69f992dab2e83cdb9db30dcb715ebdfe6d403be3e94df393a921f506b63ef9d8b30a107f26b57cd39810faa9bee461afe5e1afd cmake.patch +dbf6609a21e39ae87fa89f2faf9c98a011f287cb383c5b74f92f41e3a350b487e69643c94110f7fcc25e9e25921a698cc20d9ee021d36ff908d03c0d5ca88a46 cmake-helpers.patch +f1b710509d97b5a2a4d021747e73884d27ae00fd93a04c90be01f123cdcc59be4757b4a73dff9c9921b7794551e531cf6729e4211144c60294d107b92a928b51 pyproject.patch +" diff --git a/backports/py3-pynest2d/cmake-helpers.patch b/backports/py3-pynest2d/cmake-helpers.patch new file mode 100644 index 0000000..288df07 --- /dev/null +++ b/backports/py3-pynest2d/cmake-helpers.patch @@ -0,0 +1,253 @@ +--- /dev/null ++++ ./cmake/CMakeBuilder.py +@@ -0,0 +1,13 @@ ++from sipbuild import SetuptoolsBuilder ++ ++ ++class CMakeBuilder(SetuptoolsBuilder): ++ def __init__(self, project, **kwargs): ++ print("Using the CMake builder") ++ super().__init__(project, **kwargs) ++ ++ def build(self): ++ """ Only Generate the source files """ ++ print("Generating the source files") ++ self._generate_bindings() ++ self._generate_scripts() +\ No newline at end of file +--- /dev/null ++++ ./cmake/FindSIP.py +@@ -0,0 +1,57 @@ ++# -*- coding: utf-8 -*- ++# ++# Copyright (c) 2007, Simon Edwards ++# All rights reserved. ++# ++# Redistribution and use in source and binary forms, with or without ++# modification, are permitted provided that the following conditions are met: ++# * Redistributions of source code must retain the above copyright ++# notice, this list of conditions and the following disclaimer. ++# * Redistributions in binary form must reproduce the above copyright ++# notice, this list of conditions and the following disclaimer in the ++# documentation and/or other materials provided with the distribution. ++# * Neither the name of the Simon Edwards nor the ++# names of its contributors may be used to endorse or promote products ++# derived from this software without specific prior written permission. ++# ++# THIS SOFTWARE IS PROVIDED BY Simon Edwards ''AS IS'' AND ANY ++# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++# DISCLAIMED. IN NO EVENT SHALL Simon Edwards BE LIABLE FOR ANY ++# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ++# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ++# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++# ++# FindSIP.py ++# Copyright (c) 2007, Simon Edwards ++# Redistribution and use is allowed according to the terms of the BSD license. ++# For details see the accompanying COPYING-CMAKE-SCRIPTS file. ++ ++try: ++ import sipbuild ++ ++ print("sip_version:%06.0x" % sipbuild.version.SIP_VERSION) ++ print("sip_version_num:%d" % sipbuild.version.SIP_VERSION) ++ print("sip_version_str:%s" % sipbuild.version.SIP_VERSION_STR) ++ ++ from distutils.sysconfig import get_python_lib ++ python_modules_dir = get_python_lib(plat_specific=1) ++ print("default_sip_dir:%s" % python_modules_dir) ++except ImportError: # Code for SIP v4 ++ import sipconfig ++ ++ sipcfg = sipconfig.Configuration() ++ print("sip_version:%06.0x" % sipcfg.sip_version) ++ print("sip_version_num:%d" % sipcfg.sip_version) ++ print("sip_version_str:%s" % sipcfg.sip_version_str) ++ print("sip_bin:%s" % sipcfg.sip_bin) ++ print("default_sip_dir:%s" % sipcfg.default_sip_dir) ++ print("sip_inc_dir:%s" % sipcfg.sip_inc_dir) ++ # SIP 4.19.10+ has new sipcfg.sip_module_dir ++ if hasattr(sipcfg, "sip_module_dir"): ++ print("sip_module_dir:%s" % sipcfg.sip_module_dir) ++ else: ++ print("sip_module_dir:%s" % sipcfg.sip_mod_dir) +--- /dev/null ++++ ./cmake/FindSIP.cmake +@@ -0,0 +1,65 @@ ++# Find SIP ++# ~~~~~~~~ ++# ++# SIP website: http://www.riverbankcomputing.co.uk/sip/index.php ++# ++# Find the installed version of SIP. FindSIP should be called after Python ++# has been found. ++# ++# This file defines the following variables: ++# ++# SIP_VERSION - The version of SIP found expressed as a 6 digit hex number ++# suitable for comparison as a string. ++# ++# SIP_VERSION_STR - The version of SIP found as a human readable string. ++# ++# SIP_BINARY_PATH - Path and filename of the SIP command line executable. ++# ++# SIP_INCLUDE_DIR - Directory holding the SIP C++ header file. ++# ++# SIP_DEFAULT_SIP_DIR - Default directory where .sip files should be installed ++# into. ++ ++# Copyright (c) 2007, Simon Edwards ++# Redistribution and use is allowed according to the terms of the BSD license. ++# For details see the accompanying COPYING-CMAKE-SCRIPTS file. ++ ++ ++ ++IF(SIP_VERSION OR SIP_BUILD_EXECUTABLE) ++ # Already in cache, be silent ++ SET(SIP_FOUND TRUE) ++ELSE() ++ ++ FIND_FILE(_find_sip_py FindSIP.py PATHS ${CMAKE_MODULE_PATH} NO_CMAKE_FIND_ROOT_PATH) ++ ++ EXECUTE_PROCESS(COMMAND ${Python_EXECUTABLE} ${_find_sip_py} OUTPUT_VARIABLE sip_config) ++ IF(sip_config) ++ STRING(REGEX REPLACE "^sip_version:([^\n]+).*$" "\\1" SIP_VERSION ${sip_config}) ++ STRING(REGEX REPLACE ".*\nsip_version_num:([^\n]+).*$" "\\1" SIP_VERSION_NUM ${sip_config}) ++ STRING(REGEX REPLACE ".*\nsip_version_str:([^\n]+).*$" "\\1" SIP_VERSION_STR ${sip_config}) ++ STRING(REGEX REPLACE ".*\ndefault_sip_dir:([^\n]+).*$" "\\1" SIP_DEFAULT_SIP_DIR ${sip_config}) ++ IF(${SIP_VERSION_STR} VERSION_LESS 5) ++ STRING(REGEX REPLACE ".*\nsip_bin:([^\n]+).*$" "\\1" SIP_BINARY_PATH ${sip_config}) ++ STRING(REGEX REPLACE ".*\nsip_inc_dir:([^\n]+).*$" "\\1" SIP_INCLUDE_DIR ${sip_config}) ++ STRING(REGEX REPLACE ".*\nsip_module_dir:([^\n]+).*$" "\\1" SIP_MODULE_DIR ${sip_config}) ++ ELSE(${SIP_VERSION_STR} VERSION_LESS 5) ++ FIND_PROGRAM(SIP_BUILD_EXECUTABLE sip-build) ++ ENDIF(${SIP_VERSION_STR} VERSION_LESS 5) ++ SET(SIP_FOUND TRUE) ++ ENDIF(sip_config) ++ ++ IF(SIP_FOUND) ++ IF(NOT SIP_FIND_QUIETLY) ++ MESSAGE(STATUS "Found SIP version: ${SIP_VERSION_STR}") ++ ENDIF(NOT SIP_FIND_QUIETLY) ++ ELSE(SIP_FOUND) ++ IF(SIP_FIND_REQUIRED) ++ MESSAGE(FATAL_ERROR "Could not find SIP") ++ ENDIF(SIP_FIND_REQUIRED) ++ ENDIF(SIP_FOUND) ++ ++ENDIF() ++ ++include(${CMAKE_SOURCE_DIR}/cmake/SIPMacros.cmake) ++ADD_DEFINITIONS(-DSIP_VERSION=0x${SIP_VERSION}) +--- /dev/null ++++ ./cmake/SIPMacros.cmake +@@ -0,0 +1,105 @@ ++# Macros for SIP ++# ~~~~~~~~~~~~~~ ++ ++set(SIP_ARGS --pep484-pyi --no-protected-is-public) ++ ++function(add_sip_module MODULE_TARGET) ++ if(NOT SIP_BUILD_EXECUTABLE) ++ set(SIP_BUILD_EXECUTABLE ${CMAKE_PREFIX_PATH}/Scripts/sip-build) ++ endif() ++ ++ message(STATUS "SIP: Generating pyproject.toml") ++ configure_file(${CMAKE_SOURCE_DIR}/pyproject.toml.in ${CMAKE_CURRENT_BINARY_DIR}/pyproject.toml) ++ configure_file(${CMAKE_SOURCE_DIR}/cmake/CMakeBuilder.py ${CMAKE_CURRENT_BINARY_DIR}/CMakeBuilder.py) ++ if(WIN32) ++ set(ext .pyd) ++ set(env_path_sep ";") ++ else() ++ set(ext .so) ++ set(env_path_sep ":") ++ endif() ++ ++ message(STATUS "SIP: Generating source files") ++ execute_process( ++ COMMAND ${CMAKE_COMMAND} -E env "PYTHONPATH=${PYTHONPATH}${env_path_sep}$ENV{PYTHONPATH}${env_path_sep}${CMAKE_CURRENT_BINARY_DIR}" ${SIP_BUILD_EXECUTABLE} ${SIP_ARGS} ++ COMMAND_ECHO STDOUT ++ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ ++ ) ++ # This will generate the source-files during the configuration step in CMake. Needed to obtain the sources ++ ++ # Touch the generated files (8 in total) to make them dirty and force them to rebuild ++ message(STATUS "SIP: Touching the source files") ++ set(_sip_output_files) ++ list(LENGTH SIP_FILES _no_outputfiles) ++ foreach(_concat_file_nr RANGE 0 ${_no_outputfiles}) ++ if(${_concat_file_nr} LESS 8) ++ list(APPEND _sip_output_files "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/sip${MODULE_TARGET}part${_concat_file_nr}.cpp") ++ endif() ++ endforeach() ++ ++ # Find the generated source files ++ message(STATUS "SIP: Collecting the generated source files") ++ file(GLOB sip_c "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/*.c") ++ file(GLOB sip_cpp "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/*.cpp") ++ file(GLOB sip_hdr "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/*.h") ++ ++ # Add the user specified source files ++ message(STATUS "SIP: Collecting the user specified source files") ++ get_target_property(usr_src ${MODULE_TARGET} SOURCES) ++ ++ # create the target library and link all the files (generated and user specified ++ message(STATUS "SIP: Linking the interface target against the shared library") ++ set(sip_sources "${sip_c}" "${sip_cpp}") ++ if(${usr_src}) ++ list(APPEND sip_sources "${usr_src}") ++ endif() ++ ++ if (BUILD_SHARED_LIBS) ++ add_library("sip_${MODULE_TARGET}" SHARED ${sip_sources}) ++ else() ++ add_library("sip_${MODULE_TARGET}" STATIC ${sip_sources}) ++ endif() ++ ++ # Make sure that the library name of the target is the same as the MODULE_TARGET with the appropriate extension ++ target_link_libraries("sip_${MODULE_TARGET}" PRIVATE "${MODULE_TARGET}") ++ set_target_properties("sip_${MODULE_TARGET}" PROPERTIES PREFIX "") ++ set_target_properties("sip_${MODULE_TARGET}" PROPERTIES SUFFIX ${ext}) ++ set_target_properties("sip_${MODULE_TARGET}" PROPERTIES OUTPUT_NAME "${MODULE_TARGET}") ++ ++ # Add the custom command to (re-)generate the files and mark them as dirty. This allows the user to actually work ++ # on the sip definition files without having to reconfigure the complete project. ++ add_custom_command( ++ TARGET "sip_${MODULE_TARGET}" ++ COMMAND ${CMAKE_COMMAND} -E env "PYTHONPATH=${PYTHONPATH}${env_path_sep}$ENV{PYTHONPATH}${env_path_sep}${CMAKE_CURRENT_BINARY_DIR}" ${SIP_BUILD_EXECUTABLE} ${SIP_ARGS} ++ COMMAND ${CMAKE_COMMAND} -E touch ${_sip_output_files} ++ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ ++ MAIN_DEPENDENCY ${MODULE_SIP} ++ DEPENDS ${sip_sources} ++ VERBATIM ++ ) ++ ++ set_target_properties("sip_${MODULE_TARGET}" ++ PROPERTIES ++ RESOURCE "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/${MODULE_TARGET}.pyi") ++endfunction() ++ ++function(install_sip_module MODULE_TARGET) ++ if(DEFINED ARGV1) ++ set(_install_path ${ARGV1}) ++ else() ++ if(DEFINED Python_SITEARCH) ++ set(_install_path ${Python_SITEARCH}) ++ elseif(DEFINED Python_SITELIB) ++ set(_install_path ${Python_SITELIB}) ++ else() ++ message(FATAL_ERROR "SIP: Specify the site-packages location") ++ endif() ++ endif() ++ message(STATUS "SIP: Installing Python module and PEP 484 file in ${_install_path}") ++ install(TARGETS "sip_${MODULE_TARGET}" ++ ARCHIVE DESTINATION ${_install_path} ++ LIBRARY DESTINATION ${_install_path} ++ RUNTIME DESTINATION ${_install_path} ++ RESOURCE DESTINATION ${_install_path} ++ ) ++endfunction() diff --git a/backports/py3-pynest2d/cmake.patch b/backports/py3-pynest2d/cmake.patch new file mode 100644 index 0000000..c2ac24e --- /dev/null +++ b/backports/py3-pynest2d/cmake.patch @@ -0,0 +1,34 @@ +--- ./CMakeLists.txt.orig ++++ ./CMakeLists.txt +@@ -2,16 +2,25 @@ + project(pynest2d) + cmake_minimum_required(VERSION 3.20) + +-find_package(nest2d REQUIRED) +-find_package(cpython REQUIRED) ++list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) + +-find_package(standardprojectsettings REQUIRED) +-find_package(sipbuildtool REQUIRED) ++find_package(Libnest2D REQUIRED) + ++find_package(Python REQUIRED COMPONENTS Interpreter Development) ++find_package(SIP REQUIRED 6.5.0) ++ + add_library(pynest2d INTERFACE) +-use_threads(pynest2d) + +-target_link_libraries(pynest2d INTERFACE nest2d::nest2d cpython::cpython) ++target_include_directories(pynest2d ++ INTERFACE ++ $ ++ $ ++ ) ++ ++find_package(Threads REQUIRED) ++find_package(Boost REQUIRED) ++target_link_libraries(pynest2d INTERFACE Libnest2D::libnest2d Python::Python Threads::Threads Boost::boost) ++ + add_sip_module(pynest2d) + install_sip_module(pynest2d) + diff --git a/backports/py3-pynest2d/pyproject.patch b/backports/py3-pynest2d/pyproject.patch new file mode 100644 index 0000000..3c74389 --- /dev/null +++ b/backports/py3-pynest2d/pyproject.patch @@ -0,0 +1,21 @@ +--- /dev/null ++++ ./pyproject.toml.in +@@ -0,0 +1,17 @@ ++[build-system] ++requires = ["sip >=6, <7"] ++build-backend = "sipbuild.api" ++ ++[tool.sip.metadata] ++name = "pynest2d" ++ ++[tool.sip.project] ++builder-factory = "CMakeBuilder" ++sip-files-dir = "${CMAKE_CURRENT_SOURCE_DIR}/src/" ++sip-include-dirs = ["CMAKE_CURRENT_SOURCE_DIR/src/"] ++build-dir = "${CMAKE_CURRENT_BINARY_DIR}/pynest2d/" ++ ++[tool.sip.bindings.pynest2d] ++exceptions = true ++release-gil = true ++concatenate = 8 +\ No newline at end of file diff --git a/backports/py3-pyqt6-sip/APKBUILD b/backports/py3-pyqt6-sip/APKBUILD new file mode 100644 index 0000000..59f6c14 --- /dev/null +++ b/backports/py3-pyqt6-sip/APKBUILD @@ -0,0 +1,36 @@ +# Contributor: Rosie K Languet +# Maintainer: Rosie K Languet +pkgname=py3-pyqt6-sip +pkgver=13.8.0 +pkgrel=0 +pkgdesc="The sip module support for PyQt6" +url="https://riverbankcomputing.com/software/sip" +arch="all" +license="custom:sip" +depends="python3" +makedepends=" + py3-gpep517 + py3-setuptools + py3-wheel + python3-dev + " +source="https://pypi.python.org/packages/source/P/PyQt6-sip/PyQt6_sip-$pkgver.tar.gz" +options="!check" # No tests +builddir="$srcdir/PyQt6_sip-$pkgver" + +build() { + export CFLAGS="$CFLAGS -O2 -flto=auto" + export CXXFLAGS="$CXXFLAGS -O2 -flto=auto" + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +6947690e61fe65a21f61d034ae9de7b7adb001c59a4a362933c5441648fe27140b43666efa73f981b138cfc73fac72777bb7318b98accc3c7f808687e3fc5d81 PyQt6_sip-13.8.0.tar.gz +" diff --git a/backports/py3-pytube/APKBUILD b/backports/py3-pytube/APKBUILD new file mode 100644 index 0000000..6d27b69 --- /dev/null +++ b/backports/py3-pytube/APKBUILD @@ -0,0 +1,42 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-pytube +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=pytube +pkgver=15.0.0 +pkgrel=1 +pkgdesc="Python 3 library for downloading YouTube Videos." +url="https://pypi.python.org/project/pytube" +arch="noarch" +license="Unlicense" +checkdepends="py3-pytest" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source="$pkgname-$pkgver.tar.gz::https://github.com/pytube/pytube/archive/refs/tags/v$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" +# 7/131 units failing due to: +# AttributeError: 'NoneType' object has no attribute 'register_on_progress_callback' +# AttributeError: 'YouTube' object has no attribute 'stream_monostate' +# StopIteration +options="!check" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer "$builddir"/.dist/*.whl + .testenv/bin/python3 -m pytest -v +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +fc28d87c56bae9da3def68224a03687cc521c26e6f38dd41abe81e84f91bb2cab73dc8c7dbbc388787cf066f7d7304c78162cc60c544b99e75187b760c64b4a3 py3-pytube-15.0.0.tar.gz +" diff --git a/backports/py3-qt6/APKBUILD b/backports/py3-qt6/APKBUILD new file mode 100644 index 0000000..fbf7cb7 --- /dev/null +++ b/backports/py3-qt6/APKBUILD @@ -0,0 +1,59 @@ +# Contributor: Rosie K Languet +# Maintainer: Rosie K Languet +pkgname=py3-qt6 +pkgver=6.7.1 +pkgrel=0 +pkgdesc="Python 3 bindings for the Qt toolkit" +url="https://www.riverbankcomputing.com/software/pyqt/" +arch="all" +license="GPL-3.0-only" +depends=" + py3-pyqt6-sip + python3 + " +makedepends=" + libx11-dev + py3-dbus-dev + py3-opengl + py3-pyqt-builder + py3-sip + python3-dev + qt6-qtbase-dev + qt6-qtconnectivity-dev + qt6-qtdeclarative-dev + qt6-qtmultimedia-dev + qt6-qtserialport-dev + qt6-qtsvg-dev + qt6-qttools-dev + qt6-qtwebchannel-dev + qt6-qtwebsockets-dev + " + +subpackages="$pkgname-pyc" +source="https://pypi.python.org/packages/source/P/PyQt6/PyQt6-$pkgver.tar.gz" +builddir="$srcdir/PyQt6-$pkgver" + +build() { + export CFLAGS="$CFLAGS -O2 -flto=auto" + export CXXFLAGS="$CXXFLAGS -O2 -flto=auto" + sip-build \ + --confirm-license \ + --qmake /usr/lib/qt6/bin/qmake \ + --api-dir /usr/share/qt6/qsci/api/python \ + --pep484-pyi \ + --no-make + make -C build +} + +check() { + make -C build check +} + +package() { + make DESTDIR="$pkgdir" INSTALL_ROOT="$pkgdir" -C build install -j1 + python3 -m compileall -j 0 "$pkgdir"/usr/lib/python3* +} + +sha512sums=" +1e0fec009e1823b06460fd96eddc00ed31388c20f6d832aa0ebaa130baf06d83514df43af7961c3cb2872570d27e539d6db7bf6143ccdfd61a19da7521be2c7e PyQt6-6.7.1.tar.gz +" diff --git a/backports/py3-rapidjson/APKBUILD b/backports/py3-rapidjson/APKBUILD new file mode 100644 index 0000000..1418ad7 --- /dev/null +++ b/backports/py3-rapidjson/APKBUILD @@ -0,0 +1,56 @@ +# Contributor: Marian Buschsieweke +# Maintainer: Marian Buschsieweke +pkgname=py3-rapidjson +pkgver=1.12 +pkgrel=1 +pkgdesc="Python3 wrapper around RapidJSON" +url="https://github.com/python-rapidjson/python-rapidjson" +arch="all" +license="MIT" +depends=" + python3 + " +makedepends=" + py3-gpep517 + py3-setuptools + py3-wheel + python3-dev + rapidjson-dev + " +checkdepends=" + py3-pytest + py3-tz + " +source="$pkgname-$pkgver.tar.gz::https://github.com/python-rapidjson/python-rapidjson/archive/refs/tags/v$pkgver.tar.gz" +builddir="$srcdir/"python-rapidjson-$pkgver + +prepare() { + default_prepare + + # workaround setup.py complaining about "sources not found" + mkdir -v rapidjson/include +} + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + PYTHONPATH="$(echo "$PWD"/build/lib.linux*)" pytest \ + --ignore benchmarks \ + --deselect tests/test_base_types.py::test_base_values \ + --deselect tests/test_unicode.py::test_unicode_decode_error \ + --deselect tests/test_validator.py::test_additional_and_pattern_properties_valid \ + # +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +15d021491c64db53352830d8f3f62c8b48476fcb001f97c174bcbb9053d973eb135ceb92f14290a58f6ad6c5dfb24d02f6385c8cad70f4a74f5a5726aa0728e7 py3-rapidjson-1.12.tar.gz +" diff --git a/backports/py3-rtree/APKBUILD b/backports/py3-rtree/APKBUILD new file mode 100644 index 0000000..52acba3 --- /dev/null +++ b/backports/py3-rtree/APKBUILD @@ -0,0 +1,34 @@ +# Contributor: Alex Yam +# Maintainer: Alex Yam +pkgname=py3-rtree +_pkgname=rtree +pkgver=1.1.0 +pkgrel=1 +pkgdesc="Python3 library for r-tree spatial index (wrapper for libspatialindex)" +url="https://pypi.org/project/Rtree/" +# s390x: Test failed: IndexSerialization::test_interleaving - AssertionError +# s390x: Test failed: IndexStream::test_stream_input - AssertionError +arch="noarch !s390x" +license="MIT" +depends="python3 libspatialindex-dev" +makedepends="py3-setuptools py3-wheel" +checkdepends="py3-pytest py3-numpy" +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://github.com/Toblerity/rtree/archive/$pkgver.tar.gz" +builddir="$srcdir"/$_pkgname-$pkgver + +build() { + python3 setup.py build +} + +check() { + python3 -m pytest -v --doctest-modules rtree tests +} + +package() { + python3 setup.py install --skip-build --root="$pkgdir" +} + +sha512sums=" +97a87027e49520f12cb86444ee8a9795fabeec6d8f0e3e869f2714df8f7c649ced1374385852af0ce7d7eb91e5a2cb464a4330807be15d538dc0a4d8de7b7ca2 py3-rtree-1.1.0.tar.gz +" diff --git a/backports/py3-sip/APKBUILD b/backports/py3-sip/APKBUILD new file mode 100644 index 0000000..8469075 --- /dev/null +++ b/backports/py3-sip/APKBUILD @@ -0,0 +1,38 @@ +# Contributor: Francesco Colista +# Maintainer: Francesco Colista +pkgname=py3-sip +pkgver=6.8.6 +pkgrel=0 +pkgdesc="A tool that makes it easy to create Python bindings for C and C++ libraries" +options="!check" # No testsuite +url="https://www.riverbankcomputing.com/software/sip/" +arch="all" +license="custom:sip" +depends=" + py3-packaging + py3-ply + py3-setuptools + py3-toml + " +makedepends="python3-dev py3-gpep517 py3-wheel" +subpackages="$pkgname-pyc" +source="https://pypi.python.org/packages/source/s/sip/sip-$pkgver.tar.gz" +builddir="$srcdir/sip-$pkgver" + +replaces="py-sip" # Backwards comptibility +provides="py-sip=$pkgver-r$pkgrel" # Backwards comptibility + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/sip-*.whl +} + +sha512sums=" +c884c58fc51708e2dd247453f2214e6b01d7e1a9a0166b4228feb5d996310ace2665238dde26af34907e596a0a1c710fc130ae79297f430f73f639a3eb781a50 sip-6.8.6.tar.gz +" diff --git a/backports/py3-svgpath/105_use-better-than-nothing-font.patch b/backports/py3-svgpath/105_use-better-than-nothing-font.patch new file mode 100644 index 0000000..7e3d18d --- /dev/null +++ b/backports/py3-svgpath/105_use-better-than-nothing-font.patch @@ -0,0 +1,300 @@ +From a17ed35e490a99a7dfab9833f6f3be86f004f699 Mon Sep 17 00:00:00 2001 +From: Benjamin Drung +Date: Fri, 15 Dec 2023 15:32:16 +0100 +Subject: [PATCH] tests: Use better than nothing font +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Pillow 10.1.0 uses a version of Aileron Regular instead of the previous +“better than nothing” default font (in case FreeType support is +available). This font change changes the resulting bitmap. + +Use the "better than nothing" font to keep the expected result +identical. The proper solution is either to use one specific font in +svg.path or make pillow support loading the “better than nothing” +default font. + +Bug-Debian: https://bugs.debian.org/1055159 +--- + tests/font.py | 145 ++++++++++++++++++++++++++++++++ + tests/test_boundingbox_image.py | 18 ++-- + tests/test_image.py | 18 +++- + 3 files changed, 170 insertions(+), 11 deletions(-) + create mode 100644 tests/font.py + +diff --git a/tests/font.py b/tests/font.py +new file mode 100644 +index 0000000..d375f49 +--- /dev/null ++++ b/tests/font.py +@@ -0,0 +1,145 @@ ++# Code taken from https://github.com/python-pillow/Pillow/blob/main/src/PIL/ImageFont.py ++# ++# License: the open source HPND License ++# Copyright (c) 1997-2003 by Secret Labs AB ++# Copyright (c) 1996-2003 by Fredrik Lundh ++ ++from PIL import Image, ImageFont ++from io import BytesIO ++import base64 ++ ++ ++def get_better_than_nothing_font(): ++ font = ImageFont.ImageFont() ++ font._load_pilfont_data( ++ # courB08 ++ BytesIO( ++ base64.b64decode( ++ b""" ++UElMZm9udAo7Ozs7OzsxMDsKREFUQQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAA//8AAQAAAAAAAAABAAEA ++BgAAAAH/+gADAAAAAQAAAAMABgAGAAAAAf/6AAT//QADAAAABgADAAYAAAAA//kABQABAAYAAAAL ++AAgABgAAAAD/+AAFAAEACwAAABAACQAGAAAAAP/5AAUAAAAQAAAAFQAHAAYAAP////oABQAAABUA ++AAAbAAYABgAAAAH/+QAE//wAGwAAAB4AAwAGAAAAAf/5AAQAAQAeAAAAIQAIAAYAAAAB//kABAAB ++ACEAAAAkAAgABgAAAAD/+QAE//0AJAAAACgABAAGAAAAAP/6AAX//wAoAAAALQAFAAYAAAAB//8A ++BAACAC0AAAAwAAMABgAAAAD//AAF//0AMAAAADUAAQAGAAAAAf//AAMAAAA1AAAANwABAAYAAAAB ++//kABQABADcAAAA7AAgABgAAAAD/+QAFAAAAOwAAAEAABwAGAAAAAP/5AAYAAABAAAAARgAHAAYA ++AAAA//kABQAAAEYAAABLAAcABgAAAAD/+QAFAAAASwAAAFAABwAGAAAAAP/5AAYAAABQAAAAVgAH ++AAYAAAAA//kABQAAAFYAAABbAAcABgAAAAD/+QAFAAAAWwAAAGAABwAGAAAAAP/5AAUAAABgAAAA ++ZQAHAAYAAAAA//kABQAAAGUAAABqAAcABgAAAAD/+QAFAAAAagAAAG8ABwAGAAAAAf/8AAMAAABv ++AAAAcQAEAAYAAAAA//wAAwACAHEAAAB0AAYABgAAAAD/+gAE//8AdAAAAHgABQAGAAAAAP/7AAT/ ++/gB4AAAAfAADAAYAAAAB//oABf//AHwAAACAAAUABgAAAAD/+gAFAAAAgAAAAIUABgAGAAAAAP/5 ++AAYAAQCFAAAAiwAIAAYAAP////oABgAAAIsAAACSAAYABgAA////+gAFAAAAkgAAAJgABgAGAAAA ++AP/6AAUAAACYAAAAnQAGAAYAAP////oABQAAAJ0AAACjAAYABgAA////+gAFAAAAowAAAKkABgAG ++AAD////6AAUAAACpAAAArwAGAAYAAAAA//oABQAAAK8AAAC0AAYABgAA////+gAGAAAAtAAAALsA ++BgAGAAAAAP/6AAQAAAC7AAAAvwAGAAYAAP////oABQAAAL8AAADFAAYABgAA////+gAGAAAAxQAA ++AMwABgAGAAD////6AAUAAADMAAAA0gAGAAYAAP////oABQAAANIAAADYAAYABgAA////+gAGAAAA ++2AAAAN8ABgAGAAAAAP/6AAUAAADfAAAA5AAGAAYAAP////oABQAAAOQAAADqAAYABgAAAAD/+gAF ++AAEA6gAAAO8ABwAGAAD////6AAYAAADvAAAA9gAGAAYAAAAA//oABQAAAPYAAAD7AAYABgAA//// +++gAFAAAA+wAAAQEABgAGAAD////6AAYAAAEBAAABCAAGAAYAAP////oABgAAAQgAAAEPAAYABgAA ++////+gAGAAABDwAAARYABgAGAAAAAP/6AAYAAAEWAAABHAAGAAYAAP////oABgAAARwAAAEjAAYA ++BgAAAAD/+gAFAAABIwAAASgABgAGAAAAAf/5AAQAAQEoAAABKwAIAAYAAAAA//kABAABASsAAAEv ++AAgABgAAAAH/+QAEAAEBLwAAATIACAAGAAAAAP/5AAX//AEyAAABNwADAAYAAAAAAAEABgACATcA ++AAE9AAEABgAAAAH/+QAE//wBPQAAAUAAAwAGAAAAAP/7AAYAAAFAAAABRgAFAAYAAP////kABQAA ++AUYAAAFMAAcABgAAAAD/+wAFAAABTAAAAVEABQAGAAAAAP/5AAYAAAFRAAABVwAHAAYAAAAA//sA ++BQAAAVcAAAFcAAUABgAAAAD/+QAFAAABXAAAAWEABwAGAAAAAP/7AAYAAgFhAAABZwAHAAYAAP// ++//kABQAAAWcAAAFtAAcABgAAAAD/+QAGAAABbQAAAXMABwAGAAAAAP/5AAQAAgFzAAABdwAJAAYA ++AP////kABgAAAXcAAAF+AAcABgAAAAD/+QAGAAABfgAAAYQABwAGAAD////7AAUAAAGEAAABigAF ++AAYAAP////sABQAAAYoAAAGQAAUABgAAAAD/+wAFAAABkAAAAZUABQAGAAD////7AAUAAgGVAAAB ++mwAHAAYAAAAA//sABgACAZsAAAGhAAcABgAAAAD/+wAGAAABoQAAAacABQAGAAAAAP/7AAYAAAGn ++AAABrQAFAAYAAAAA//kABgAAAa0AAAGzAAcABgAA////+wAGAAABswAAAboABQAGAAD////7AAUA ++AAG6AAABwAAFAAYAAP////sABgAAAcAAAAHHAAUABgAAAAD/+wAGAAABxwAAAc0ABQAGAAD////7 ++AAYAAgHNAAAB1AAHAAYAAAAA//sABQAAAdQAAAHZAAUABgAAAAH/+QAFAAEB2QAAAd0ACAAGAAAA ++Av/6AAMAAQHdAAAB3gAHAAYAAAAA//kABAABAd4AAAHiAAgABgAAAAD/+wAF//0B4gAAAecAAgAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAB ++//sAAwACAecAAAHpAAcABgAAAAD/+QAFAAEB6QAAAe4ACAAGAAAAAP/5AAYAAAHuAAAB9AAHAAYA ++AAAA//oABf//AfQAAAH5AAUABgAAAAD/+QAGAAAB+QAAAf8ABwAGAAAAAv/5AAMAAgH/AAACAAAJ ++AAYAAAAA//kABQABAgAAAAIFAAgABgAAAAH/+gAE//sCBQAAAggAAQAGAAAAAP/5AAYAAAIIAAAC ++DgAHAAYAAAAB//kABf/+Ag4AAAISAAUABgAA////+wAGAAACEgAAAhkABQAGAAAAAP/7AAX//gIZ ++AAACHgADAAYAAAAA//wABf/9Ah4AAAIjAAEABgAAAAD/+QAHAAACIwAAAioABwAGAAAAAP/6AAT/ +++wIqAAACLgABAAYAAAAA//kABP/8Ai4AAAIyAAMABgAAAAD/+gAFAAACMgAAAjcABgAGAAAAAf/5 ++AAT//QI3AAACOgAEAAYAAAAB//kABP/9AjoAAAI9AAQABgAAAAL/+QAE//sCPQAAAj8AAgAGAAD/ ++///7AAYAAgI/AAACRgAHAAYAAAAA//kABgABAkYAAAJMAAgABgAAAAH//AAD//0CTAAAAk4AAQAG ++AAAAAf//AAQAAgJOAAACUQADAAYAAAAB//kABP/9AlEAAAJUAAQABgAAAAH/+QAF//4CVAAAAlgA ++BQAGAAD////7AAYAAAJYAAACXwAFAAYAAP////kABgAAAl8AAAJmAAcABgAA////+QAGAAACZgAA ++Am0ABwAGAAD////5AAYAAAJtAAACdAAHAAYAAAAA//sABQACAnQAAAJ5AAcABgAA////9wAGAAAC ++eQAAAoAACQAGAAD////3AAYAAAKAAAAChwAJAAYAAP////cABgAAAocAAAKOAAkABgAA////9wAG ++AAACjgAAApUACQAGAAD////4AAYAAAKVAAACnAAIAAYAAP////cABgAAApwAAAKjAAkABgAA//// +++gAGAAACowAAAqoABgAGAAAAAP/6AAUAAgKqAAACrwAIAAYAAP////cABQAAAq8AAAK1AAkABgAA ++////9wAFAAACtQAAArsACQAGAAD////3AAUAAAK7AAACwQAJAAYAAP////gABQAAAsEAAALHAAgA ++BgAAAAD/9wAEAAACxwAAAssACQAGAAAAAP/3AAQAAALLAAACzwAJAAYAAAAA//cABAAAAs8AAALT ++AAkABgAAAAD/+AAEAAAC0wAAAtcACAAGAAD////6AAUAAALXAAAC3QAGAAYAAP////cABgAAAt0A ++AALkAAkABgAAAAD/9wAFAAAC5AAAAukACQAGAAAAAP/3AAUAAALpAAAC7gAJAAYAAAAA//cABQAA ++Au4AAALzAAkABgAAAAD/9wAFAAAC8wAAAvgACQAGAAAAAP/4AAUAAAL4AAAC/QAIAAYAAAAA//oA ++Bf//Av0AAAMCAAUABgAA////+gAGAAADAgAAAwkABgAGAAD////3AAYAAAMJAAADEAAJAAYAAP// ++//cABgAAAxAAAAMXAAkABgAA////9wAGAAADFwAAAx4ACQAGAAD////4AAYAAAAAAAoABwASAAYA ++AP////cABgAAAAcACgAOABMABgAA////+gAFAAAADgAKABQAEAAGAAD////6AAYAAAAUAAoAGwAQ ++AAYAAAAA//gABgAAABsACgAhABIABgAAAAD/+AAGAAAAIQAKACcAEgAGAAAAAP/4AAYAAAAnAAoA ++LQASAAYAAAAA//gABgAAAC0ACgAzABIABgAAAAD/+QAGAAAAMwAKADkAEQAGAAAAAP/3AAYAAAA5 ++AAoAPwATAAYAAP////sABQAAAD8ACgBFAA8ABgAAAAD/+wAFAAIARQAKAEoAEQAGAAAAAP/4AAUA ++AABKAAoATwASAAYAAAAA//gABQAAAE8ACgBUABIABgAAAAD/+AAFAAAAVAAKAFkAEgAGAAAAAP/5 ++AAUAAABZAAoAXgARAAYAAAAA//gABgAAAF4ACgBkABIABgAAAAD/+AAGAAAAZAAKAGoAEgAGAAAA ++AP/4AAYAAABqAAoAcAASAAYAAAAA//kABgAAAHAACgB2ABEABgAAAAD/+AAFAAAAdgAKAHsAEgAG ++AAD////4AAYAAAB7AAoAggASAAYAAAAA//gABQAAAIIACgCHABIABgAAAAD/+AAFAAAAhwAKAIwA ++EgAGAAAAAP/4AAUAAACMAAoAkQASAAYAAAAA//gABQAAAJEACgCWABIABgAAAAD/+QAFAAAAlgAK ++AJsAEQAGAAAAAP/6AAX//wCbAAoAoAAPAAYAAAAA//oABQABAKAACgClABEABgAA////+AAGAAAA ++pQAKAKwAEgAGAAD////4AAYAAACsAAoAswASAAYAAP////gABgAAALMACgC6ABIABgAA////+QAG ++AAAAugAKAMEAEQAGAAD////4AAYAAgDBAAoAyAAUAAYAAP////kABQACAMgACgDOABMABgAA//// +++QAGAAIAzgAKANUAEw== ++""" ++ ) ++ ), ++ Image.open( ++ BytesIO( ++ base64.b64decode( ++ b""" ++iVBORw0KGgoAAAANSUhEUgAAAx4AAAAUAQAAAAArMtZoAAAEwElEQVR4nABlAJr/AHVE4czCI/4u ++Mc4b7vuds/xzjz5/3/7u/n9vMe7vnfH/9++vPn/xyf5zhxzjt8GHw8+2d83u8x27199/nxuQ6Od9 ++M43/5z2I+9n9ZtmDBwMQECDRQw/eQIQohJXxpBCNVE6QCCAAAAD//wBlAJr/AgALyj1t/wINwq0g ++LeNZUworuN1cjTPIzrTX6ofHWeo3v336qPzfEwRmBnHTtf95/fglZK5N0PDgfRTslpGBvz7LFc4F ++IUXBWQGjQ5MGCx34EDFPwXiY4YbYxavpnhHFrk14CDAAAAD//wBlAJr/AgKqRooH2gAgPeggvUAA ++Bu2WfgPoAwzRAABAAAAAAACQgLz/3Uv4Gv+gX7BJgDeeGP6AAAD1NMDzKHD7ANWr3loYbxsAD791 ++NAADfcoIDyP44K/jv4Y63/Z+t98Ovt+ub4T48LAAAAD//wBlAJr/AuplMlADJAAAAGuAphWpqhMx ++in0A/fRvAYBABPgBwBUgABBQ/sYAyv9g0bCHgOLoGAAAAAAAREAAwI7nr0ArYpow7aX8//9LaP/9 ++SjdavWA8ePHeBIKB//81/83ndznOaXx379wAAAD//wBlAJr/AqDxW+D3AABAAbUh/QMnbQag/gAY ++AYDAAACgtgD/gOqAAAB5IA/8AAAk+n9w0AAA8AAAmFRJuPo27ciC0cD5oeW4E7KA/wD3ECMAn2tt ++y8PgwH8AfAxFzC0JzeAMtratAsC/ffwAAAD//wBlAJr/BGKAyCAA4AAAAvgeYTAwHd1kmQF5chkG ++ABoMIHcL5xVpTfQbUqzlAAAErwAQBgAAEOClA5D9il08AEh/tUzdCBsXkbgACED+woQg8Si9VeqY ++lODCn7lmF6NhnAEYgAAA/NMIAAAAAAD//2JgjLZgVGBg5Pv/Tvpc8hwGBjYGJADjHDrAwPzAjv/H ++/Wf3PzCwtzcwHmBgYGcwbZz8wHaCAQMDOwMDQ8MCBgYOC3W7mp+f0w+wHOYxO3OG+e376hsMZjk3 ++AAAAAP//YmCMY2A4wMAIN5e5gQETPD6AZisDAwMDgzSDAAPjByiHcQMDAwMDg1nOze1lByRu5/47 ++c4859311AYNZzg0AAAAA//9iYGDBYihOIIMuwIjGL39/fwffA8b//xv/P2BPtzzHwCBjUQAAAAD/ ++/yLFBrIBAAAA//9i1HhcwdhizX7u8NZNzyLbvT97bfrMf/QHI8evOwcSqGUJAAAA//9iYBB81iSw ++pEE170Qrg5MIYydHqwdDQRMrAwcVrQAAAAD//2J4x7j9AAMDn8Q/BgYLBoaiAwwMjPdvMDBYM1Tv ++oJodAAAAAP//Yqo/83+dxePWlxl3npsel9lvLfPcqlE9725C+acfVLMEAAAA//9i+s9gwCoaaGMR ++evta/58PTEWzr21hufPjA8N+qlnBwAAAAAD//2JiWLci5v1+HmFXDqcnULE/MxgYGBj+f6CaJQAA ++AAD//2Ji2FrkY3iYpYC5qDeGgeEMAwPDvwQBBoYvcTwOVLMEAAAA//9isDBgkP///0EOg9z35v// ++Gc/eeW7BwPj5+QGZhANUswMAAAD//2JgqGBgYGBgqEMXlvhMPUsAAAAA//8iYDd1AAAAAP//AwDR ++w7IkEbzhVQAAAABJRU5ErkJggg== ++""" ++ ) ++ ) ++ ), ++ ) ++ return font +diff --git a/tests/test_boundingbox_image.py b/tests/test_boundingbox_image.py +index 21f19a7..414f0b1 100644 +--- a/tests/test_boundingbox_image.py ++++ b/tests/test_boundingbox_image.py +@@ -5,6 +5,7 @@ + + from PIL import Image, ImageDraw, ImageColor, ImageChops + from svg.path.path import CubicBezier, QuadraticBezier, Line, Arc ++from .font import get_better_than_nothing_font + + + RED = ImageColor.getcolor("red", mode="RGB") +@@ -57,17 +58,15 @@ def draw_boundingbox(self, path): + sys.platform != "linux", reason="Different platforms have different fonts" + ) + def test_image(self): +- self.draw.text((10, 10), "This is an SVG line:") +- self.draw.text( +- (10, 100), +- "The red line is a bounding box.", +- ) ++ font = get_better_than_nothing_font() ++ self.draw.text((10, 10), "This is an SVG line:", font=font) ++ self.draw.text((10, 100), "The red line is a bounding box.", font=font) + + line1 = Line(40 + 60j, 200 + 80j) + self.draw_path(line1) + self.draw_boundingbox(line1) + +- self.draw.text((10, 140), "These are Arc segments:") ++ self.draw.text((10, 140), "These are Arc segments:", font=font) + arc1 = Arc(260 + 320j, 100 + 100j, 0, 1, 1, 260 + 319j) + self.draw_path(arc1) + self.draw_boundingbox(arc1) +@@ -83,6 +82,7 @@ def test_image(self): + self.draw.text( + (10, 500), + "Next we have a quadratic bezier curve, with one tangent:", ++ font=font, + ) + start = 30 + 600j + control = 400 + 540j +@@ -95,12 +95,16 @@ def test_image(self): + self.draw.text( + (10, 670), + "The white dot is the control point, and the cyan lines are ", ++ font=font, ++ ) ++ self.draw.text( ++ (10, 690), "illustrating the how the control point works.", font=font + ) +- self.draw.text((10, 690), "illustrating the how the control point works.") + + self.draw.text( + (10, 730), + "Lastly is a cubic bezier, with 2 tangents, and 2 control points:", ++ font=font, + ) + + start = 200 + 800j +diff --git a/tests/test_image.py b/tests/test_image.py +index 49967ea..ae3a357 100644 +--- a/tests/test_image.py ++++ b/tests/test_image.py +@@ -4,6 +4,7 @@ + from math import sqrt + + from svg.path.path import CubicBezier, QuadraticBezier, Line, Arc ++from .font import get_better_than_nothing_font + + + RED = ImageColor.getcolor("red", mode="RGB") +@@ -57,25 +58,30 @@ def draw_tangents(self, path, count): + self.draw.line([c2t(p), c2t(tt + p)], fill=YELLOW, width=1) + + def test_image(self): +- self.draw.text((10, 10), "This is an SVG line:") ++ font = get_better_than_nothing_font() ++ self.draw.text((10, 10), "This is an SVG line:", font=font) + self.draw.text( + (10, 100), + "The red line is a tangent, and the yellow is 90 degrees from that.", ++ font=font, + ) + + line1 = Line(40 + 60j, 200 + 80j) + self.draw_path(line1) + self.draw_tangents(line1, 1) + +- self.draw.text((10, 140), "This is an Arc segment, almost a whole circle:") ++ self.draw.text( ++ (10, 140), "This is an Arc segment, almost a whole circle:", font=font ++ ) + arc1 = Arc(260 + 320j, 100 + 100j, 0, 1, 1, 260 + 319j) + self.draw_path(arc1) + self.draw_tangents(arc1, 5) +- self.draw.text((10, 460), "With five tangents.") ++ self.draw.text((10, 460), "With five tangents.", font=font) + + self.draw.text( + (10, 500), + "Next we have a quadratic bezier curve, with one tangent:", ++ font=font, + ) + start = 30 + 600j + control = 400 + 540j +@@ -88,12 +94,16 @@ def test_image(self): + self.draw.text( + (10, 670), + "The white dot is the control point, and the cyan lines are ", ++ font=font, ++ ) ++ self.draw.text( ++ (10, 690), "illustrating the how the control point works.", font=font + ) +- self.draw.text((10, 690), "illustrating the how the control point works.") + + self.draw.text( + (10, 730), + "Lastly is a cubic bezier, with 2 tangents, and 2 control points:", ++ font=font, + ) + + start = 30 + 800j diff --git a/backports/py3-svgpath/APKBUILD b/backports/py3-svgpath/APKBUILD new file mode 100644 index 0000000..12901b9 --- /dev/null +++ b/backports/py3-svgpath/APKBUILD @@ -0,0 +1,37 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +pkgname=py3-svgpath +pkgver=6.3 +pkgrel=2 +pkgdesc="SVG path and object parser" +url="https://github.com/regebro/svg.path" +arch="noarch" +license="MIT" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +checkdepends="py3-pytest py3-pillow" +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://github.com/regebro/svg.path/archive/refs/tags/$pkgver.tar.gz + 105_use-better-than-nothing-font.patch + no-install-tests.patch" +builddir="$srcdir/svg.path-$pkgver" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + PYTHONPATH=build/lib pytest +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +fd9dd9e1e603be5e212e3eb247c9f3778203f5285397a4cdde4c038c3f31f7bc2b8904491c208256996e2fbd39b4e5f7ea58d964bd5d22bc09c57e4bc2c70317 py3-svgpath-6.3.tar.gz +d12d32b0f6b075ee8602a7eee5dd1ddaa8f097fe3d471f2941fac0bba335641111eb2c0e2819dffea822f895833ffafa35baac80085cf759ca1ed8f7a6b92773 105_use-better-than-nothing-font.patch +62ab1e0980c7fb797f74b81c937a68b6af1112fff293e6ddec6389a8e490a08e181c37217408b58ce3a2ae2afda7813bb3bbe57d5414cfc18e4e53e6d2f2ea5a no-install-tests.patch +" diff --git a/backports/py3-svgpath/no-install-tests.patch b/backports/py3-svgpath/no-install-tests.patch new file mode 100644 index 0000000..994ce3c --- /dev/null +++ b/backports/py3-svgpath/no-install-tests.patch @@ -0,0 +1,15 @@ +--- ./setup.py.orig ++++ ./setup.py +@@ -1,3 +1,3 @@ +-from setuptools import setup ++from setuptools import setup, find_packages + +-setup() ++setup(packages=find_packages("src", exclude=["*tests"])) +--- ./MANIFEST.in.orig ++++ ./MANIFEST.in +@@ -3,3 +3,4 @@ + + recursive-include src *.png + ++global-exclude tests/* diff --git a/backports/py3-trimesh/APKBUILD b/backports/py3-trimesh/APKBUILD new file mode 100644 index 0000000..bab0b96 --- /dev/null +++ b/backports/py3-trimesh/APKBUILD @@ -0,0 +1,65 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +pkgname=py3-trimesh +pkgver=3.22.1 +pkgrel=1 +pkgdesc="Python library for working with triangular meshes" +url="https://github.com/mikedh/trimesh" +# x86, armhf, armv7 Tests fail on int64 to int32 casts on these arches +# s390x, no py3-rtree +# riscv64, no py3-shapely +arch="noarch !x86 !armhf !armv7 !s390x !riscv64" +# TODO: investigate why checks stall +options="!check" +license="MIT" +depends=" + py3-colorlog + py3-jsonschema + py3-lxml + py3-mapbox-earcut + py3-msgpack + py3-networkx + py3-numpy + py3-pillow + py3-requests + py3-rtree + py3-scipy + py3-shapely + py3-svgpath + python3 + " +makedepends=" + py3-gpep517 + py3-setuptools + py3-wheel + " +checkdepends="py3-pytest py3-pytest-xdist py3-pyinstrument" +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://github.com/mikedh/trimesh/archive/refs/tags/$pkgver.tar.gz" +builddir="$srcdir/trimesh-$pkgver" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + # test_obj.py: no format zae, probably needs more investigation + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + .testenv/bin/python3 -m pytest -n auto \ + --deselect tests/test_dae.py::DAETest::test_material_round \ + --deselect tests/test_dae.py::DAETest::test_obj_roundtrip \ + --deselect tests/test_light.py::LightTests::test_scene \ + --deselect tests/test_obj.py::OBJTest::test_multi_nodupe +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +27952e0d29ccd110d4087b4144e0923706bed3cd0734e7a17d7f55738c6322849c5dad04ab4ecfe0638bc16d65d1e647d08905a396dd6ebd1f78c833a8b95636 py3-trimesh-3.22.1.tar.gz +" diff --git a/backports/py3-utils/APKBUILD b/backports/py3-utils/APKBUILD new file mode 100644 index 0000000..b89b2bf --- /dev/null +++ b/backports/py3-utils/APKBUILD @@ -0,0 +1,46 @@ +# Contributor: Marian Buschsieweke +# Maintainer: Marian Buschsieweke +pkgname=py3-utils +_pkgname=python-utils +pkgver=3.8.1 +pkgrel=1 +pkgdesc="Convenient utilities not included with the standard Python install" +url="https://github.com/WoLpH/python-utils" +arch="noarch" +license="BSD-3-Clause" +makedepends="py3-gpep517 py3-setuptools py3-wheel" +checkdepends="py3-pytest py3-pytest-asyncio py3-loguru" +subpackages="$pkgname-pyc" +source=" + https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz + + fix-setuptools-deprecation.patch + pytest.patch + typing-ext.patch + " + +builddir="$srcdir/$_pkgname-$pkgver" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + .testenv/bin/python3 -m pytest +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +ccba9651cc99a8f4e3f13e7ff66a43a40d2e85bc735b6246524269495ff321225a0dcad9abd03ca9cb61b4b1b35a27009fac3fe87e3f748ffc5c87a956acd335 python-utils-3.8.1.tar.gz +c001453b958b8231806ef6a04fcd21e1d252eeec36d4e6cbfce35f0662bae76c3f7484e0e8ff06d68a3e9cc7d19c9cdbf792c13e0101c580bb5e8de9d837fde7 fix-setuptools-deprecation.patch +99cc91ad155f8140aedc9420659c0e560a4d816ac1f85468ddb3a9fdc87526d591da916441d63b601146a86fb2c26f61c9dfbe37e31b86ee605f732e24e7b465 pytest.patch +d68943e3301eaafe2a9ea27f382a2eba1ce98149d8cbbe91aa9222cf76a8f7bebba3d9dbfced54bd88c90688a6e18373f011fbb83cd36cbf2ecd3e36b034aa22 typing-ext.patch +" diff --git a/backports/py3-utils/fix-setuptools-deprecation.patch b/backports/py3-utils/fix-setuptools-deprecation.patch new file mode 100644 index 0000000..16b5e5a --- /dev/null +++ b/backports/py3-utils/fix-setuptools-deprecation.patch @@ -0,0 +1,11 @@ +--- a/setup.cfg ++++ b/setup.cfg +@@ -2,7 +2,7 @@ + test = pytest + + [metadata] +-description-file = README.rst ++description_file = README.rst + + [nosetests] + verbosity = 3 diff --git a/backports/py3-utils/pytest.patch b/backports/py3-utils/pytest.patch new file mode 100644 index 0000000..a7f016d --- /dev/null +++ b/backports/py3-utils/pytest.patch @@ -0,0 +1,14 @@ +diff --git a/pytest.ini b/pytest.ini +index a8e632a..e28ed7d 100644 +--- a/pytest.ini ++++ b/pytest.ini +@@ -5,9 +5,6 @@ python_files = + + addopts = + --doctest-modules +- --cov python_utils +- --cov-report term-missing +-; --mypy + + doctest_optionflags = + ALLOW_UNICODE diff --git a/backports/py3-utils/typing-ext.patch b/backports/py3-utils/typing-ext.patch new file mode 100644 index 0000000..ee6acb2 --- /dev/null +++ b/backports/py3-utils/typing-ext.patch @@ -0,0 +1,22 @@ +diff --git a/python_utils/types.py b/python_utils/types.py +index 01c319a..79ef950 100644 +--- a/python_utils/types.py ++++ b/python_utils/types.py +@@ -1,7 +1,6 @@ + # pyright: reportWildcardImportFromLibrary=false + import datetime + import decimal +-from typing_extensions import * # type: ignore # noqa: F403 + from typing import * # type: ignore # pragma: no cover # noqa: F403 + from types import * # type: ignore # pragma: no cover # noqa: F403 + +--- a/setup.py ++++ b/setup.py +@@ -29,7 +29,6 @@ + ), + package_data={'python_utils': ['py.typed']}, + long_description=long_description, +- install_requires=['typing_extensions>3.10.0.2'], + tests_require=['pytest'], + extras_require={ + 'loguru': [ diff --git a/backports/rapidfuzz/APKBUILD b/backports/rapidfuzz/APKBUILD new file mode 100644 index 0000000..4194b3a --- /dev/null +++ b/backports/rapidfuzz/APKBUILD @@ -0,0 +1,45 @@ +# Maintainer: +pkgname=rapidfuzz +pkgver=3.0.0 +pkgrel=0 +pkgdesc="Rapid fuzzy string matching in C++ using the Levenshtein Distance" +url="https://github.com/maxbachmann/rapidfuzz-cpp" +arch="all" +license="MIT" +makedepends=" + cmake + samurai + " +checkdepends="catch2-3" +source="$pkgname-cpp-$pkgver.tar.gz::https://github.com/maxbachmann/rapidfuzz-cpp/archive/refs/tags/v$pkgver.tar.gz + cstdint.patch + " +builddir="$srcdir/rapidfuzz-cpp-$pkgver" + +case "$CARCH" in +x86) + # float rounding + options="!check" + ;; +esac + +build() { + cmake -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DRAPIDFUZZ_BUILD_TESTING="$(want_check && echo ON || echo OFF)" + cmake --build build +} + +check() { + ctest --test-dir build --output-on-failure +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} + +sha512sums=" +c5f20399bd1cfaa057c40cc17be5d730d50c1014553241f80f461a2fa89de670357d17a4f090394170263b09a53aa29238e5eff2caf9064a2a118c42aa14f320 rapidfuzz-cpp-3.0.0.tar.gz +216c5082498830d42d2eb14d3eba35dd08446008916c920db7b55eaf3dd2358f86a61c238315b85fefecf08b9e902dc4db172f91a8479cfd735e53c7b3e03bf5 cstdint.patch +" diff --git a/backports/rapidfuzz/cstdint.patch b/backports/rapidfuzz/cstdint.patch new file mode 100644 index 0000000..cce9033 --- /dev/null +++ b/backports/rapidfuzz/cstdint.patch @@ -0,0 +1,12 @@ +diff --git a/rapidfuzz_reference/JaroWinkler.hpp b/rapidfuzz_reference/JaroWinkler.hpp +index 3b717d8..9d415e4 100644 +--- a/rapidfuzz_reference/JaroWinkler.hpp ++++ b/rapidfuzz_reference/JaroWinkler.hpp +@@ -2,6 +2,7 @@ + /* Copyright © 2022-present Max Bachmann */ + + #pragma once ++#include + #include "Jaro.hpp" + + namespace rapidfuzz_reference { diff --git a/backports/shntool/APKBUILD b/backports/shntool/APKBUILD index 05cb959..60dd2b5 100644 --- a/backports/shntool/APKBUILD +++ b/backports/shntool/APKBUILD @@ -1,8 +1,8 @@ # Contributor: Carlo Landmeter -# Maintainer: Jean-Louis Fuchs +# Maintainer: Jean-Louis Fuchs pkgname=shntool pkgver=3.0.10 -pkgrel=6 +pkgrel=4 pkgdesc="A multi-purpose WAVE data processing and reporting utility" url="http://shnutils.freeshell.org/shntool/" arch="all" @@ -13,7 +13,6 @@ source="http://shnutils.freeshell.org/shntool/dist/src/shntool-$pkgver.tar.gz shntool-3.0.10-large-size.patch shntool-3.0.10-large-times.patch 24bit.patch - no-cdquality-check.patch " build() { @@ -25,8 +24,7 @@ build() { --sysconfdir=/etc \ --mandir=/usr/share/man \ --infodir=/usr/share/info \ - --localstatedir=/var \ - CFLAGS="--std=gnu17" + --localstatedir=/var make } @@ -65,5 +63,4 @@ sha512sums=" fc44bca63d79b279db6d275caaacdb73cbebd6b902276a9052f005146fa125f4674e3cf559d46405637a337192f4a38f9bec4836af46e7ae52e4f220352c1ba7 shntool-3.0.10-large-size.patch 9780f22d93e20dd01d18067978bdf6cbb0b460bb80f41c4f4752b3322c3d70182b3acf35b789e30fc36ca52af6127e24c00599fb49b916f01448613721a94ebe shntool-3.0.10-large-times.patch 3c9cdd7936a6572a3c9dfc7575f5ff9a0981dd557add8e1113454487091c7b161040d25d3266937449295a1bb5317ee3515a84c3d7168360bf84643ed828e202 24bit.patch -e5b5fe4894eea92e026eec666900bde2b10ea33d4b0ffbf74a231e443c476e11b50eebc21bc2ff2b844ca48af0a41a7b6af77fdc524d0b1bd33d03f133d99992 no-cdquality-check.patch " diff --git a/backports/shntool/no-cdquality-check.patch b/backports/shntool/no-cdquality-check.patch deleted file mode 100644 index 4ca3717..0000000 --- a/backports/shntool/no-cdquality-check.patch +++ /dev/null @@ -1,21 +0,0 @@ -Last-Update: 2014-11-15 -Forwarded: yes -Author: Dmitry Smirnov -Bug-Debian: http://bugs.debian.org/769585 -Description: disable CD-quality check, needed to process 24bit 96kHz files. - ---- a/src/core_mode.c -+++ b/src/core_mode.c -@@ -344,10 +344,10 @@ - - *colon = 0; - *dot = 0; - -- if (PROB_NOT_CD(info)) -- st_error("m:ss.ff format can only be used with CD-quality files"); -+// if (PROB_NOT_CD(info)) -+// st_error("m:ss.ff format can only be used with CD-quality files"); - - min = atoi((const char *)buf); - sec = atoi((const char *)(colon+1)); - frames = atoi((const char *)(dot+1)); diff --git a/backports/signal-desktop/APKBUILD b/backports/signal-desktop/APKBUILD index ede5795..b804d51 100644 --- a/backports/signal-desktop/APKBUILD +++ b/backports/signal-desktop/APKBUILD @@ -1,15 +1,13 @@ # Contributor: lauren n. liberda -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) +# Maintainer: lauren n. liberda pkgname=signal-desktop -pkgver=7.76.0 -pkgrel=1 +pkgver=7.11.0 +pkgrel=0 pkgdesc="A messaging app for simple private communication with friends" url="https://github.com/signalapp/Signal-Desktop/" # same as electron arch="aarch64 x86_64" license="AGPL-3.0-only" -_llvmver=21 depends=" electron font-barlow @@ -25,10 +23,11 @@ makedepends=" cargo cargo-auditable cbindgen - clang$_llvmver-dev + clang-dev cmake crc32c-dev dav1d-dev + double-conversion-dev electron-dev electron-tasje ffmpeg-dev @@ -36,18 +35,18 @@ makedepends=" glib-dev gn jsoncpp-dev + libavif-dev libjpeg-turbo-dev libepoxy-dev + libevent-dev libsecret-dev libvpx-dev libwebp-dev - libxml2-dev lld - llvm$_llvmver-dev + llvm-dev mesa-dev nodejs npm - pnpm openh264-dev openssl-dev opus-dev @@ -56,7 +55,6 @@ makedepends=" pulseaudio-dev py3-setuptools python3 - re2-dev samurai sqlcipher-dev vips-dev @@ -64,38 +62,41 @@ makedepends=" " options="net !check" -# use _check_depends to validate this -_libsignalver=0.83.0 -_ringrtcver=2.59.0 -_webrtcver=7339c -_sqlcipherver=2.4.4 +# follow signal-desktop package.json -> @signalapp/libsignal-client +_libsignalver=0.46.2 + +# follow signal-desktop package.json -> @signalapp/ringrtc +_ringrtcver=2.42.0 + +# follow ringrtc (on version above) -> config/version.properties -> webrtc.version +# downloading tarball generated with abuild snapshot (with gclient dependencies fetched) +_webrtcver=6261i + +# follow @signalapp/better-sqlite3 (on version in package.json) -> deps/download.js -> TOKENIZER_VERSION +# last bsqlite version: 8.7.1 +_stokenizerver=0.2.1 source=" https://github.com/signalapp/Signal-Desktop/archive/refs/tags/v$pkgver/Signal-Desktop-$pkgver.tar.gz https://github.com/signalapp/libsignal/archive/refs/tags/v$_libsignalver/libsignal-$_libsignalver.tar.gz https://github.com/signalapp/ringrtc/archive/refs/tags/v$_ringrtcver/ringrtc-$_ringrtcver.tar.gz - https://github.com/signalapp/node-sqlcipher/archive/refs/tags/v$_sqlcipherver/node-sqlcipher-$_sqlcipherver.tar.gz - https://ayakael.net/api/packages/mirrors/generic/webrtc/$_webrtcver/webrtc-$_webrtcver.tar.zst + https://ab-sn.lnl.gay/webrtc-$_webrtcver.tar.zst + https://github.com/signalapp/Signal-FTS5-Extension/archive/refs/tags/v$_stokenizerver/stokenizer-$_stokenizerver.tar.gz + bettersqlite-use-system-sqlcipher.patch libsignal-auditable.patch - signal-use-system-sqlcipher.patch signal-disable-updates.patch signal-update-links.patch signal-show-window-please.patch - signal-rollback-locale-changes.patch - signal-do-not-package-sqlcipher-deps.patch - signal-do-not-package-desktop-entry.patch + signal-fix-dns-fallback.patch ringrtc-webrtc-renamed.patch - ringrtc-use-sh.patch - webrtc-shared-libs.patch + webrtc-shared-like-my-wife.patch webrtc-compiler.patch - webrtc-use-only-payloadtypesuggester-for-pt-assignement.patch - webrtc-fix-declaration-that-change-meaning-inside-class.patch - webrtc-rtcbase-platform-thread-type-do-not-include-linux-prctl-header.patch + webrtc-gcc13.patch - signal-desktop.sh + signal-desktop " -builddir="$srcdir" +builddir="$srcdir/Signal-Desktop-$pkgver" # webrtc broken on clang https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101227 export CC=gcc @@ -111,37 +112,12 @@ export CFLAGS="${CFLAGS/-g/} -O2 -Wno-error -Wno-deprecated-builtins -Wno-unknow export CXXFLAGS="${CXXFLAGS/-g/} -O2 -Wno-error -Wno-deprecated-builtins -Wno-unknown-warning-option -Wno-builtin-macro-redefined -Wno-deprecated-declarations" export CPPFLAGS="$CPPFLAGS -D__DATE__= -D__TIME__= -D__TIMESTAMP__=" -# stdatomic from compiler-rt uses implicit function declaration -export CFLAGS="$CFLAGS -Wno-implicit-function-declaration" -export CXXFLAGS="$CXXFLAGS -Wno-implicit-function-declaration" - export CARGO_PROFILE_RELEASE_OPT_LEVEL=2 export CARGO_PROFILE_RELEASE_STRIP="symbols" #export RUSTFLAGS="$RUSTFLAGS -C linker=clang" export YARN_CACHE_FOLDER="$srcdir/.yarn" -_update_depends() { - msg "Updating extra dependencies version information in $APKBUILD..." - # _libsignalver: follow signal-desktop package.json -> @signalapp/libsignal-client - # _ringrtcver: follow signal-desktop package.json -> @signalapp/ringrtc - # _webrtcver: follow ringrtc (on version above) -> config/version.properties -> webrtc.version - # downloading tarball generated with abuild snapshot (with gclient dependencies fetched) - # _sqlcipherver: follow signal-desktop package.json -> @signalapp/sqlcipher - - local _libsignalver=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Desktop/v$pkgver/package.json | grep "@signalapp/libsignal-client\": \"" | awk '{print $2}' | tr -d ',' | tr -d '"' | head -n 1) - local _ringrtcver=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Desktop/v$pkgver/package.json | grep "@signalapp/ringrtc\": \"" | awk '{print $2}' | tr -d ',' | tr -d '"' | head -n 1) - local _webrtcver=$(curl --silent https://raw.githubusercontent.com/signalapp/ringrtc/v$_ringrtcver/config/version.properties | awk -F '=' '{if($1 == "webrtc.version"){print $2}}' | head -n 1) - local _sqlcipherver=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Desktop/v$pkgver/package.json | grep "@signalapp/sqlcipher\": \"" | awk '{print $2}' | tr -d ',' | tr -d '"' | head -n 1) - - sed -i \ - -e "s|^_libsignalver=.*|_libsignalver=$_libsignalver|" \ - -e "s|^_ringrtcver=.*|_ringrtcver=$_ringrtcver|" \ - -e "s|^_webrtcver=.*|_webrtcver=$_webrtcver|" \ - -e "s|^_sqlcipherver=.*|_sqlcipherver=$_sqlcipherver|" \ - $APKBUILD -} - # webrtc only, the other dependencies are fine with tarballs _distbucket="sakamoto/lnl-aports-snapshots/" snapshot() { @@ -191,31 +167,45 @@ target_cpu_only = True mcli cp "$SRCDEST"/webrtc-$_webrtcver.tar.zst "$_distbucket" } +# manual patches +default_prepare() { :; } + prepare() { - # Moves to builddir to use abuild patch logics - for i in Signal-Desktop-$pkgver libsignal-$_libsignalver ringrtc-$_ringrtcver webrtc-$_webrtcver node-sqlcipher-$_sqlcipherver; do - mv "$srcdir"/$i "$builddir"/${i%-*} - done default_prepare - - cd "$builddir"/Signal-Desktop - - # puts node modules in the root node_modules instead of under .pnpm - echo "node-linker=hoisted" >> .npmrc + msg "Applying patches" + for x in $source; do + case "$x" in + signal-*.patch) + msg "$x" + patch -p1 -i "$srcdir"/$x -d "$srcdir"/Signal-Desktop-$pkgver + ;; + libsignal-*.patch) + msg "$x" + patch -p1 -i "$srcdir"/$x -d "$srcdir"/libsignal-$_libsignalver + ;; + ringrtc-*.patch) + msg "$x" + patch -p1 -i "$srcdir"/$x -d "$srcdir"/ringrtc-$_ringrtcver + ;; + webrtc-*.patch) + msg "$x" + patch -p1 -i "$srcdir"/$x -d "$srcdir"/webrtc-$_webrtcver + ;; + esac + done msg "Installing signal-desktop JS dependencies" - pnpm install --ignore-scripts - - # remove shipped fonts for system-provided (part 1) - rm -rf fonts/ + echo 'ignore-engines true' > .yarnrc + yarn --ignore-scripts --frozen-lockfile ( - cd "$builddir"/webrtc + cd "$srcdir"/webrtc-$_webrtcver local use_system=" brotli crc32c dav1d + double-conversion ffmpeg flatbuffers fontconfig @@ -225,7 +215,9 @@ prepare() { icu jsoncpp libaom + libavif libdrm + libevent libjpeg libpng libsecret @@ -247,7 +239,6 @@ prepare() { \! -path "*third_party/$_lib/google/*" \ \! -path './base/third_party/icu/*' \ \! -path './third_party/libxml/*' \ - \! -path './third_party/re2/*' \ \! -path './third_party/pdfium/third_party/freetype/include/pstables.h' \ \! -path './third_party/harfbuzz-ng/utils/hb_scoped.h' \ \! -path './third_party/crashpad/crashpad/third_party/zlib/zlib_crashpad.h' \ @@ -259,9 +250,6 @@ prepare() { python3 build/linux/unbundle/replace_gn_files.py --system-libraries \ $use_system - # zlib depends on base for no reason - sed -i '/\/\/base/d' ./third_party/zlib/BUILD.gn - # allow system dependencies in "official builds" sed -i 's/OFFICIAL_BUILD/GOOGLE_CHROME_BUILD/' \ tools/generate_shim_headers/generate_shim_headers.py @@ -271,45 +259,45 @@ prepare() { ) ( - cd "$builddir"/ringrtc/src/rust + cd "$srcdir"/ringrtc-$_ringrtcver/src/rust msg "Installing ringrtc rust dependencies" cargo fetch --target="$CTARGET" --locked ) ( - cd "$builddir"/libsignal + cd "$srcdir"/libsignal-$_libsignalver msg "Installing libsignal rust dependencies" cargo fetch --target="$CTARGET" --locked ) ( - cd "$builddir"/node-sqlcipher + cd "$srcdir"/Signal-FTS5-Extension-$_stokenizerver - # fix target - sed -i 's/unknown-linux-gnu/alpine-linux-musl/g' deps/extension/extension.gyp - - msg "Installing sqlcipher js dependencies" - pnpm install --ignore-scripts + msg "Installing signal tokenizer rust dependencies" + cargo fetch --target="$CTARGET" --locked ) ( - cd "$builddir"/ringrtc/src/node + cd "$srcdir"/ringrtc-$_ringrtcver/src/node msg "Installing ringrtc js dependencies" - npm ci --ignore-scripts + yarn --frozen-lockfile --ignore-scripts ) ( - cd "$builddir"/libsignal/node + cd "$srcdir"/libsignal-$_libsignalver/node # fix target - sed -i 's/unknown-linux-gnu/alpine-linux-musl/g' build_node_bridge.py + sed -i 's/unknown-linux-gnu/alpine-linux-musl/g' binding.gyp msg "Installing libsignal js dependencies" yarn --ignore-scripts --frozen-lockfile ) + + # remove shipped fonts for system-provided (part 1) + rm -rf fonts/ } build() { @@ -317,7 +305,7 @@ build() { # required dependency of ringrtc ( - cd "$builddir"/webrtc + cd "$srcdir"/webrtc-$_webrtcver export PATH="$PWD/path:$PATH" # shellcheck disable=2089 @@ -330,9 +318,6 @@ build() { rtc_include_ilbc=false rtc_libvpx_build_vp9=true rtc_use_x11=false - rustc_version=\"yes\" - rust_bindgen_root=\"/usr\" - rust_sysroot_absolute=\"/usr\" build_with_mozilla=false chrome_pgo_phase=0 @@ -352,18 +337,18 @@ build() { use_lld=true use_sysroot=false " - mkdir -p "$builddir"/ringrtc/out/release + mkdir -p "$srcdir"/ringrtc-$_ringrtcver/out/release msg "Building signal's webrtc" # shellcheck disable=2090,2116 - gn gen "$builddir"/ringrtc/out/release --args="$(echo $webrtc_args)" - ninja -C "$builddir"/ringrtc/out/release signaldeswebrtc + gn gen "$srcdir"/ringrtc-$_ringrtcver/out/release --args="$(echo $webrtc_args)" + ninja -C "$srcdir"/ringrtc-$_ringrtcver/out/release signaldeswebrtc ) ( - cd "$builddir"/ringrtc + cd "$srcdir"/ringrtc-$_ringrtcver msg "Building libringrtc" - OUTPUT_DIR="$builddir"/ringrtc/out \ + OUTPUT_DIR="$srcdir"/ringrtc-$_ringrtcver/out \ cargo auditable build --features electron --release -p ringrtc mkdir -p src/node/build/linux @@ -372,108 +357,114 @@ build() { ) ( - cd "$builddir"/ringrtc/src/node + cd "$srcdir"/ringrtc-$_ringrtcver/src/node msg "Building ringrtc JS glue code" - npm run build + yarn build msg "Cleaning dev dependencies for ringrtc" - npm prune --ignore-scripts --omit=dev + yarn --ignore-scripts --frozen-lockfile --production ) # module on npm intentionally unbuildable: https://github.com/signalapp/libsignal/issues/464#issuecomment-1160665052 ( - cd "$builddir"/libsignal/node + cd "$srcdir"/libsignal-$_libsignalver/node msg "Building libsignal" - npm_config_nodedir=/usr/include/electron/node_headers python3 build_node_bridge.py + yarn node-gyp configure --nodedir=/usr/include/electron/node_headers --build-from-source + yarn node-gyp build --nodedir=/usr/include/electron/node_headers --build-from-source mkdir -p prebuilds/linux-$chromium_arch mv build/Release/libsignal_client_linux_$chromium_arch.node prebuilds/linux-$chromium_arch/node.napi.node msg "Building libsignal glue code" - npm run tsc + yarn tsc msg "Cleaning dev dependencies for libsignal" - npm prune -ignore-scripts --omit=dev + yarn --ignore-scripts --frozen-lockfile --production ) ( - cd "$builddir"/node-sqlcipher + cd "$srcdir"/Signal-FTS5-Extension-$_stokenizerver - ( - cd deps/extension - msg "Building sqlcipher-extension" - cargo auditable build --release --target $CTARGET - ) - - msg "Building sqlcipher" - node-gyp configure --nodedir=/usr/include/electron/node_headers --build-from-source - node-gyp build --nodedir=/usr/include/electron/node_headers --build-from-source - - msg "Building sqlcipher glue code" - pnpm build - - mkdir -p prebuilds/linux-$chromium_arch - mv build/Release/obj.target/node_sqlcipher.node prebuilds/linux-$chromium_arch/node.napi.node - - msg "Cleaning dev dependencies for sqlcipher" - pnpm prune --ignore-scripts --prod + msg "Building signal tokenizer" + cargo auditable build --features extension --release --frozen + cbindgen --profile release . -o target/release/signal-tokenizer.h ) - msg "Building signal-desktop" - cd "$builddir"/Signal-Desktop - # from package.json postinstall - pnpm run build:acknowledgments + yarn build:acknowledgments + yarn patch-package rm -rf node_modules/dtrace-provider # get esbuild installed (needed for next step) - pnpm rebuild esbuild + npm rebuild esbuild # build front - # resets GIT_CEILING_DIRECTORIES as sometimes abuild sets this and breaks get-expire-time NODE_ENV=production \ SIGNAL_ENV=production \ NODE_OPTIONS=--openssl-legacy-provider \ - GIT_CEILING_DIRECTORIES= \ - pnpm run build:dev + yarn build:dev # purge non-production deps - pnpm prune --ignore-scripts --prod + yarn install --ignore-scripts --frozen-lockfile --production + + # XXX: the previous step undoes the patches. and removes the patch applier. + # please force me to just implement packaging without dev modules in tasje. -lnl + for x in patches/*.patch; do + # some of these patches are made for devDependencies + if [ -d "$(grep -Eo 'node_modules/(@[a-z\d_-]+/)?[a-z\d_-]+/' "$x" | head -n1)" ]; then + msg "$x" + patch -Np1 -i ./"$x" + fi + done # use our libsignal rm -rf node_modules/@signalapp/libsignal-client/ - cp -r "$builddir"/libsignal/node/ node_modules/@signalapp/libsignal-client + mv "$srcdir"/libsignal-$_libsignalver/node/ node_modules/@signalapp/libsignal-client # use our libringrtc rm -rf node_modules/@signalapp/ringrtc/ - cp -r "$builddir"/ringrtc/src/node/ node_modules/@signalapp/ringrtc + mv "$srcdir"/ringrtc-$_ringrtcver/src/node/ node_modules/@signalapp/ringrtc - # use our sqlcipher - rm -rf node_modules/@signalapp/sqlcipher/ - cp -r "$builddir"/node-sqlcipher node_modules/@signalapp/sqlcipher + # patch the sqlcipher module + for x in $source; do + case "$x" in + bettersqlite-*.patch) + msg "$x" + patch -Np1 -i "$srcdir"/$x -d "$srcdir"/Signal-Desktop-$pkgver/node_modules/@signalapp/better-sqlite3/ + ;; + esac + done + + mkdir node_modules/@signalapp/better-sqlite3/tokenizer + mv "$srcdir"/Signal-FTS5-Extension-$_stokenizerver/target/release/libsignal_tokenizer.a node_modules/@signalapp/better-sqlite3/tokenizer/ + mv "$srcdir"/Signal-FTS5-Extension-$_stokenizerver/target/release/signal-tokenizer.h node_modules/@signalapp/better-sqlite3/tokenizer/ + + npm rebuild \ + sharp @signalapp/better-sqlite3 spellchecker websocket \ + utf-8-validate bufferutil fs-xattr \ + --nodedir=/usr/include/electron/node_headers --build-from-source SIGNAL_ENV=production \ tasje pack } check() { - cd "$builddir"/Signal-Desktop # tests run against downloaded build of electron for glibc, probably can be patched - pnpm run test + yarn test } package() { - cd "$builddir"/Signal-Desktop/tasje_out + cd "$builddir"/tasje_out install -Dm644 resources/app.asar "$pkgdir"/usr/lib/$pkgname/app.asar cp -r resources/app.asar.unpacked "$pkgdir"/usr/lib/$pkgname/app.asar.unpacked install -Dm644 signal.desktop "$pkgdir"/usr/share/applications/$pkgname.desktop # this should be in /usr/lib/signal-desktop. however, it does not simply work and I stopped to care - install -Dm755 "$builddir"/ringrtc/out/release/libsignaldeswebrtc.so "$pkgdir"/usr/lib/libsignaldeswebrtc.so + install -Dm755 "$srcdir"/ringrtc-$_ringrtcver/out/release/libsignaldeswebrtc.so "$pkgdir"/usr/lib/libsignaldeswebrtc.so - install -Dm755 "$srcdir"/signal-desktop.sh "$pkgdir"/usr/bin/signal-desktop + install -Dm755 "$srcdir"/$pkgname "$pkgdir"/usr/bin/$pkgname while read -r size; do install -Dm644 icons/$size.png "$pkgdir"/usr/share/icons/hicolor/$size/apps/$pkgname.png @@ -481,25 +472,20 @@ package() { } sha512sums=" -c847d3679df77ca137b4c3345b3b941a08639677efcd5eeea6613572fa90b8ad1b8d1d53e077902d4f47c05c480c408787024906d6917dcbf4a840838bf6d79d Signal-Desktop-7.76.0.tar.gz -43271a64f65a4cf0e7855fb84476ff811ef248665cb74fdaa9ce12b02d2039abdf8fca28554e7e884eabaa9bdd77e8f5383e6354e589436671675ddab7194d81 libsignal-0.83.0.tar.gz -ba4a1850bd096470a6370a0bf730550f64df4a2349cacca3b4864ef1a3a04713dd200307b9ad7ba47425322573148d6bd2ce85c11c2a49232d41e739ef5e788d ringrtc-2.59.0.tar.gz -79dd21548329b4ee409fa73b013c18ed4e85038aeef7a4cfe196fd6b5113279da8ad287a259fa6a6b546b52a5a6dd6ae2cb1050007043d25f76d7917dbbbc02d node-sqlcipher-2.4.4.tar.gz -06ffb4cdb82f818cc419d42ff2de03977d7e94c5f3eb8ac8a401bcb52ec38fa988c5d757f4bd79e5d9968fa83754fc9046180c950961c90a59eeb6130bf5552f webrtc-7339c.tar.zst -8d2d2d82c8546c2dd1fef161b61df79918f8c22235a56a46adb375a0beb4acef12c5fe53e67242a4be97f77adc522ff79b47949c352956c742a70d50f4179f7f libsignal-auditable.patch -7ee747c8aaa9d6e9149fe0a031e3d4cc9e9c08f22c42076bd05e2acb86952f8170032613d13a53716010edfa3f26ad97b530e82460318eb46a42e28cf5faeb9d signal-use-system-sqlcipher.patch -ef3622da416a5bd2d4bea4f2a4fbb21a985f660d4acc17bbe66ce51ac1180ab92c0c843a5414ff56ea1deda87c2b0f611a299ca8ebe4d6a24df53626b36ceea8 signal-disable-updates.patch -853de84d636f730694f17bcec63463fa7bfbdd0a7f7a64618a8fc6bc523ce1a9854b4c651753735af735c18101295d3efbe54f83ae0bccbed83c8c1fee3e7049 signal-update-links.patch -882d6889b23a3ebc6449c8b6acec8c3853674a7e94f066d65b57bab674ba8c11d582ba2c760825cb67b9202716e6d8b7123001d1e9f9229e49a0b77e9d978265 signal-show-window-please.patch -3dd3bf2f6925e2672a20ef56bbac519099d54e912e5a434a0649ea152db5039dbe1bbade3430b485ae9a6085d747dd88602d4efc5198d5a4dbf1b8359de11f94 signal-rollback-locale-changes.patch -961568777b86f8fbcc73360252123686c9d1e16b2650f23d8afbc6d7580d53024f81b62e9e9cbdcd0031b5cf99854bd47c6dd4580197f2b27b8b4cbb51c6c9c9 signal-do-not-package-sqlcipher-deps.patch -d8cafd4ae1f7438417f5c414d68a175c3d24b66a14b9f3b8ca9c9acae2b2eaa68985ee81c1df7d754a206ff1c9b02929803440fb0734db38b6ac9ab3e34205b0 signal-do-not-package-desktop-entry.patch -02a648bb8541a39c75fec2db39f024a27976afca41908eefa2fe1f2e30b05b5d59f980ccc930021c0b0c09ba8b0cbcae071e9f0dd530543c667adbc4272af552 ringrtc-webrtc-renamed.patch -19d2e07bdc0b160ec542fcb0a3d94ae1e37dcb1b3455e57b278cf074f8aac625341b47f4f06a1f7eb5a197cb0f11754de8785ffd10876852972cbfafdc2615db ringrtc-use-sh.patch -a9374040dcbc9203c8a3b4ad1cf97d58805cd4755f4f585a988b113697ea97d5900ad68f6a30aa0621f34ab54ae98984a8ce228a2d08186ee1bf3384abf3f364 webrtc-shared-libs.patch -8ba740f0552872ddf383545a6bb99bf7bcdd2610cee51c6e69dc667893006facd5d72f62274e25c1a58e1a58c8e8b0b5303b648e4c74a71925639cc9691c72c4 webrtc-compiler.patch -d44f62e4ccf2d9094d6ed217b24fa2cde276c7f64f4d6fd26e84dfc021ea667abcb21f9e4666cfd0d88d6ee0a6b1a20b6cc68c8720462711e3b5451e263f6c4a webrtc-use-only-payloadtypesuggester-for-pt-assignement.patch -ace87a2be03c6965012a87a10918c5923b10d5e74a7169c1e1384c15b34a367d0c47e806764c368cc30dad01a3dce54b50587abea9831130178db3806619abc8 webrtc-fix-declaration-that-change-meaning-inside-class.patch -d17ecd89e867b24a21144d267e1bf7d09e3898018a0f9fcd87084b9de8091bc56f904a1cabdc487a8e46ab509c11ddd363c574d75d85a79e3c4d9424a13b2093 webrtc-rtcbase-platform-thread-type-do-not-include-linux-prctl-header.patch -8e1de53ec1608fa05972af605213e8423b8f88cfd8d6a1989bdcaf77ed1420871c39efa15c56ffeccb6ff86677acc5bc436020f3554bee4f94930c7d9f4e16b6 signal-desktop.sh +cebb1c8412089fe6f5faa9d4bfcb8bb4e8c9d2f3e4a13eef15e8f36d97b4bc65eae3c0865af0a7c82a0af2fd0597482b3d7c1f25e7d51465ea2589c817183b19 Signal-Desktop-7.11.0.tar.gz +6be40fcfbcb9bd20c51dd9ef1c65e7f586fbbee04af66af89a5b8c0ce3fa2ce5efd586e10de1d6d5c579126ed4bb2f31e50a8448ed5390d12e226cd075537007 libsignal-0.46.2.tar.gz +5cb7e88e8c04244a8f4727237dd0662357eb84dfb384de57c6579f01f0c53944d019a2af29efe37c4d30993fdba4be6f9bd9f7975ac24e43207fe814e0b95f95 ringrtc-2.42.0.tar.gz +89796d611bd7cda7c0e98318826753b1acc373396d77f2a0a826bf95e9e28d2c0f33181705b50b1afc52fdf12dbf3d35e30ad86b0ce3052ed9131ea20c842d04 webrtc-6261i.tar.zst +84a1f2fc29262a12842e94698d124a85b823128e72a493b0be8ea92fbb72c5c268499f4a6827cdedaae06ec73cce4039a39fe5c5d536cbef330e59ba0183da28 stokenizer-0.2.1.tar.gz +be5b4e823543b79175a12314f10c6326d9f0d59f470136962daed4665887006acc05b48b40dc1b67747396d8f6f7d23be298c1e110ccdd35ff9b09d5e6b80bab bettersqlite-use-system-sqlcipher.patch +92de6fc7cc5f2b6d65bedbd74cc733dd86dafc9cbfb9b727c3267aef63a71a07247cde9b163c68fddfeb9096dcd7f554d36d0b2de078d8905e3825645ddbd6eb libsignal-auditable.patch +152435231cdcf52a17a9e24aadf95d77511258e818172941ba074a73a90a541f0136feb58868674f2bcb19191a6d12933fe6cd5baf3ee99e508915c72523163b signal-disable-updates.patch +d50eb5724502df9ea4d795db8cfc27af767c25168d7db2af512e615be7cc2ca290210a9ae78e1abb153c0198677e858ad3d74926c958099d0319295e7d9e7f1d signal-update-links.patch +646d303fe58cae3f0896ae0275a66695b902fae6ddde7c568cc9798157dee9f45ceff907bc951fadc4c511d512a73d114b4e4f7c8914e2311c63929d29e1621a signal-show-window-please.patch +3df878d259cdc12fe116651e9978deb6c15b5bce477d692b2301f17bc660327b29ac4412cfd6966bd0cef15c90675c56ce7c3abd8e2119899cc5d281ab1d9474 signal-fix-dns-fallback.patch +b11fdd930943ca327650e4738ed85cd6b5eea779455a5895bccebba98e449bafc6b0f09bcf4545f2b2e16644355664e9768dd6d4d62f87619207c430367f72c5 ringrtc-webrtc-renamed.patch +9d92389637cdda83a0a7039fa6c52516d7bc491d0b1e42d5374b9d1f4fa7b9c930642f2dca896da17a2dc3344fa1bb97434c8dddd0539a4fedfd0dec809fc875 webrtc-shared-like-my-wife.patch +e07ae8544988d402aaf0fbd95ea36a64c94c59566c561132578aa6dcf8ff11a34058530e64dc204e5cadc2482f1401e74b32384a144e5e08017c663d0cf7c2fc webrtc-compiler.patch +88515d8b8cc82355c9f9b0f44fac83b7ff149b13e9fb102fd46036ec5234cfb2385fa5ad58a0520ee604b93dc4ddd6ae18a7005978ef207841645724ef7a9749 webrtc-gcc13.patch +87534e7b5ad7365509eab75629e6bd1a9ed61ee92f7e358405a0abaf0df57de14623fb3894eb082f8785422e5c087e1c50f9e2e5cafbb2529591fd7bf447f7f5 signal-desktop " diff --git a/backports/signal-desktop/README.md b/backports/signal-desktop/README.md deleted file mode 100644 index a23f037..0000000 --- a/backports/signal-desktop/README.md +++ /dev/null @@ -1,61 +0,0 @@ -# signal-desktop - -This is the `signal-desktop` package for Alpine Linux. - -Please report any issues [using Gitlab](https://gitlab.alpinelinux.org/alpine/aports/-/issues/new) and tag @ayakael - -## Building signal-desktop - -Signal-desktop is an electron application that is rather complex to build - -The first layer of complexity is the use of dependencies that are themselves -rather complex to build. Some are based on nodejs, others rust. Those -dependencies are built before signal-desktop, like ringrtc, webrtc and -libsignal. The versions of those dependencies are tracked in different files, -which adds complexity when maintaining the package. Executing `abuild -_update_depends` automatically fetches the expected versions and updates -the relevant variables. - -A second layer of complexity is that webrtc's source code isn't available as a -downloadable tarball. It is only fetchable using Google's `gclient` available -in `depot_tools` with a reimplemented version in the `teapot` package. By -executing, `abuild snapshot`, webrtc tarball can be fetched and packaged, as -long as `gclient` is in your path. For ease of maintenance, a workflow on -[Ayakael's Forge](https://ayakael.net/mirrors/signal-desktop) automatically -fetches and packages the source code and makes it available in a [generic -Forgejo repository](https://ayakael.net/mirrors/-/packages/generic/webrtc). - -## Updating signal-desktop - -In a nutshell: - -1. Set `pkgver` to up-to-date version - -2. Update the dependency versions using `abuild _update_depends` - -3. Optional: fetch webrtc using `abuild snapshot`, making sure `client` -is in your path - -4. Update source checksum using `abuild checksum` - -## Finding dependency version information - -Here is where the version information is stored. It is different for every -extra dependency. - -* _libsignalver: follow signal-desktop package.json -> -@signalapp/libsignal-client -* _ringrtcver: follow signal-desktop package.json -> @signalapp/ringrtc -* _webrtcver: follow ringrtc (on version above) -> config/version.properties -> -webrtc.version downloading tarball generated with abuild snapshot (with gclient -dependencies fetched) -* _stokenizerver: follow @signalapp/better-sqlite3 (on version in package.json) --> deps/download.js -> TOKENIZER_VERSION - -## Why is this package still in testing - -As `electron` is still in testing, this package cannot yet be moved to -`community`. Until that changes, this package is also kept-to-date against the -latest release of Alpine Linux (along with `electron`) in -[Ayakael's Forge](https://ayakael.net/forge/-/packages/alpine/signal-desktop). -This is true of all Ayakael's packages still in `testing`. diff --git a/backports/signal-desktop/bettersqlite-use-system-sqlcipher.patch b/backports/signal-desktop/bettersqlite-use-system-sqlcipher.patch new file mode 100644 index 0000000..f0dfe0d --- /dev/null +++ b/backports/signal-desktop/bettersqlite-use-system-sqlcipher.patch @@ -0,0 +1,56 @@ +--- a/binding.gyp ++++ b/binding.gyp +@@ -7,7 +7,16 @@ + 'targets': [ + { + 'target_name': 'better_sqlite3', +- 'dependencies': ['deps/sqlite3.gyp:sqlite3'], ++ 'include_dirs': [ ++ '/usr/include/sqlcipher', ++ 'tokenizer', ++ ], ++ 'link_settings': { ++ 'libraries': [ ++ '-lsqlcipher', ++ ' int: - if 'npm_config_libsignal_debug_level_logs' not in os.environ: - features.append('log/release_max_level_info') +--- ./node/build_node_bridge.py.orig ++++ ./node/build_node_bridge.py +@@ -63,7 +63,7 @@ -- cmdline = ['cargo', 'build', '--target', cargo_target, '-p', 'libsignal-node', '--features', ','.join(features)] -+ cmdline = ['cargo', 'auditable', 'build', '--target', cargo_target, '-p', 'libsignal-node', '--features', ','.join(features)] + out_dir = options.out_dir.strip('"') or os.path.join('build', configuration_name) + +- cmdline = ['cargo', 'build', '--target', cargo_target, '-p', 'libsignal-node', '--features', 'testing-fns'] ++ cmdline = ['cargo', 'auditable', 'build', '--target', cargo_target, '-p', 'libsignal-node', '--features', 'testing-fns'] if configuration_name == 'Release': cmdline.append('--release') print("Running '%s'" % (' '.join(cmdline))) diff --git a/backports/signal-desktop/ringrtc-use-sh.patch b/backports/signal-desktop/ringrtc-use-sh.patch deleted file mode 100644 index 53ec09c..0000000 --- a/backports/signal-desktop/ringrtc-use-sh.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff --git a/ringrtc/src/node/package.json.orig b/ringrtc/src/node/package.json -index 366caf2927f..eedeca3895e 100644 ---- a/ringrtc/src/node/package.json.orig -+++ b/ringrtc/src/node/package.json -@@ -16,7 +16,7 @@ - "virtual_audio": "dist/bin/virtual_audio.sh" - }, - "scripts": { -- "build": "tsc && bash scripts/build-help.sh", -+ "build": "tsc && sh scripts/build-help.sh", - "clean": "rimraf dist", - "test": "electron-mocha --renderer --recursive dist/test --timeout 10000 --require source-map-support/register", - "eslint": "eslint .", - diff --git a/backports/signal-desktop/ringrtc-webrtc-renamed.patch b/backports/signal-desktop/ringrtc-webrtc-renamed.patch index 6e5e6d1..228c308 100644 --- a/backports/signal-desktop/ringrtc-webrtc-renamed.patch +++ b/backports/signal-desktop/ringrtc-webrtc-renamed.patch @@ -1,22 +1,20 @@ -diff --git a/ringrtc/src/rust/build.rs.orig b/ringrtc/src/rust/build.rs -index ff2ce04d1cf..ccdaaaef84d 100644 ---- a/ringrtc/src/rust/build.rs.orig -+++ b/ringrtc/src/rust/build.rs -@@ -61,6 +61,7 @@ fn main() { +--- ./src/rust/build.rs.orig ++++ ./src/rust/build.rs +@@ -79,6 +79,7 @@ + if cfg!(feature = "native") { - let webrtc_dir = - if cfg!(feature = "prebuilt_webrtc") || cfg!(feature = "prebuilt_webrtc_sim") { -+ panic!("trying to download prebuild webrtc"); - if let Err(e) = fs::create_dir_all(&out_dir) { - panic!("Failed to create webrtc out directory: {:?}", e); - } -@@ -74,12 +75,12 @@ fn main() { - // Ignore build type since we only have release prebuilts - format!("{}/release/obj/", out_dir) - } else { -- format!("{}/{}/obj", out_dir, build_type) -+ format!("{}/{}", out_dir, build_type) - }; + let webrtc_dir = if cfg!(feature = "prebuilt_webrtc") { ++ panic!("trying to download prebuild webrtc"); + if let Err(e) = fs::create_dir_all(&out_dir) { + panic!("Failed to create webrtc out directory: {:?}", e); + } +@@ -86,12 +87,12 @@ + // Ignore build type since we only have release prebuilts + format!("{}/release/obj/", out_dir) + } else { +- format!("{}/{}/obj", out_dir, build_type) ++ format!("{}/{}", out_dir, build_type) + }; println!("cargo:rerun-if-changed={}", webrtc_dir); println!("cargo:rerun-if-changed={}", config_dir()); println!("cargo:rustc-link-search=native={}", webrtc_dir); diff --git a/backports/signal-desktop/signal-desktop.sh b/backports/signal-desktop/signal-desktop similarity index 66% rename from backports/signal-desktop/signal-desktop.sh rename to backports/signal-desktop/signal-desktop index 3904d51..370469c 100755 --- a/backports/signal-desktop/signal-desktop.sh +++ b/backports/signal-desktop/signal-desktop @@ -3,4 +3,4 @@ # app chooses config (including used endpoints) based on this export NODE_ENV=production -exec electron /usr/lib/signal-desktop/app.asar "$@" +exec electron /usr/lib/signal-desktop/app.asar diff --git a/backports/signal-desktop/signal-disable-updates.patch b/backports/signal-desktop/signal-disable-updates.patch index 3d8fc38..9b9c134 100644 --- a/backports/signal-desktop/signal-disable-updates.patch +++ b/backports/signal-desktop/signal-disable-updates.patch @@ -1,11 +1,9 @@ -diff --git a/Signal-Desktop/config/production.json.orig b/Signal-Desktop/config/production.json -index ee1fc6523d8..6fcb97f3a36 100644 ---- a/Signal-Desktop/config/production.json.orig -+++ b/Signal-Desktop/config/production.json +--- a/config/production.json ++++ b/config/production.json @@ -16,5 +16,5 @@ + "serverTrustRoot": "BXu6QIKVz5MA8gstzfOgRQGqyLqOwNKHL6INkv3IHWMF", "genericServerPublicParams": "AByD873dTilmOSG0TjKrvpeaKEsUmIO8Vx9BeMmftwUs9v7ikPwM8P3OHyT0+X3EUMZrSe9VUp26Wai51Q9I8mdk0hX/yo7CeFGJyzoOqn8e/i4Ygbn5HoAyXJx5eXfIbqpc0bIxzju4H/HOQeOpt6h742qii5u/cbwOhFZCsMIbElZTaeU+BWMBQiZHIGHT5IE0qCordQKZ5iPZom0HeFa8Yq0ShuEyAl0WINBiY6xE3H/9WnvzXBbMuuk//eRxXgzO8ieCeK8FwQNxbfXqZm6Ro1cMhCOF3u7xoX83QhpN", "backupServerPublicParams": "AJwNSU55fsFCbgaxGRD11wO1juAs8Yr5GF8FPlGzzvdJJIKH5/4CC7ZJSOe3yL2vturVaRU2Cx0n751Vt8wkj1bozK3CBV1UokxV09GWf+hdVImLGjXGYLLhnI1J2TWEe7iWHyb553EEnRb5oxr9n3lUbNAJuRmFM7hrr0Al0F0wrDD4S8lo2mGaXe0MJCOM166F8oYRQqpFeEHfiLnxA1O8ZLh7vMdv4g9jI5phpRBTsJ5IjiJrWeP0zdIGHEssUeprDZ9OUJ14m0v61eYJMKsf59Bn+mAT2a7YfB+Don9O", - "stripePublishableKey": "pk_live_6cmGZopuTsV8novGgJJW9JpC00vLIgtQ1D", - "updatesEnabled": true + "updatesEnabled": false } diff --git a/backports/signal-desktop/signal-do-not-package-desktop-entry.patch b/backports/signal-desktop/signal-do-not-package-desktop-entry.patch deleted file mode 100644 index 7a973a1..0000000 --- a/backports/signal-desktop/signal-do-not-package-desktop-entry.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/Signal-Desktop/package.json.orig b/Signal-Desktop/package.json -index 832035e..e6ac14c 100644 ---- a/Signal-Desktop/package.json.orig -+++ b/Signal-Desktop/package.json -@@ -519,11 +519,6 @@ - }, - "linux": { - "category": "Network;InstantMessaging;Chat", -- "desktop": { -- "entry": { -- "StartupWMClass": "signal" -- } -- }, - "target": [ - "deb" - ], diff --git a/backports/signal-desktop/signal-do-not-package-sqlcipher-deps.patch b/backports/signal-desktop/signal-do-not-package-sqlcipher-deps.patch deleted file mode 100644 index c91209d..0000000 --- a/backports/signal-desktop/signal-do-not-package-sqlcipher-deps.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/Signal-Desktop/package.json.orig b/Signal-Desktop/package.json -index 5b7b015e20a..bb348fdb4c2 100644 ---- a/Signal-Desktop/package.json.orig -+++ b/Signal-Desktop/package.json -@@ -607,6 +607,7 @@ - "node_modules/socks/build/client/*.js", - "node_modules/smart-buffer/build/*.js", - "node_modules/@signalapp/sqlcipher/prebuilds/${platform}-${arch}/*.node", -+ "!node_modules/@signalapp/sqlcipher/deps/**", - "node_modules/@signalapp/libsignal-client/prebuilds/${platform}-${arch}/*.node", - "!node_modules/@signalapp/ringrtc/scripts/*", - "node_modules/@signalapp/ringrtc/build/${platform}/*${arch}*.node", diff --git a/backports/signal-desktop/signal-fix-dns-fallback.patch b/backports/signal-desktop/signal-fix-dns-fallback.patch new file mode 100644 index 0000000..b4f54be --- /dev/null +++ b/backports/signal-desktop/signal-fix-dns-fallback.patch @@ -0,0 +1,12 @@ +diff --git a/ts/scripts/generate-dns-fallback.ts.orig b/ts/scripts/generate-dns-fallback.ts +index dec7023..39f442f 100644 +--- a/ts/scripts/generate-dns-fallback.ts.orig ++++ b/ts/scripts/generate-dns-fallback.ts +@@ -20,7 +20,6 @@ const FALLBACK_DOMAINS = [ + 'cdn3.signal.org', + 'updates2.signal.org', + 'sfu.voip.signal.org', +- 'create.signal.art', + ]; + + async function main() { diff --git a/backports/signal-desktop/signal-rollback-locale-changes.patch b/backports/signal-desktop/signal-rollback-locale-changes.patch deleted file mode 100644 index 97e2cf9..0000000 --- a/backports/signal-desktop/signal-rollback-locale-changes.patch +++ /dev/null @@ -1,225 +0,0 @@ -From a094a2ca2b6d8758b4aea24389c35fc4f142b715 Mon Sep 17 00:00:00 2001 -From: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com> -Date: Mon, 3 Mar 2025 19:10:01 -0800 -Subject: [PATCH] Compactify locales even more - -Rollback of Compactify locales even more. For some reason, (maybe tasje?), -these new locales aren't working - ---- - app/locale.ts | 56 ++++++++++++++++-- - package.json | 2 +- - ts/scripts/generate-compact-locales.ts | 82 +++++++++++++++++++------- - 3 files changed, 112 insertions(+), 28 deletions(-) - - -diff --git a/Signal-Desktop/package.json.orig b/Signal-Desktop/package.json -index 04dd9f9200b..e7b69ef963f 100644 ---- a/Signal-Desktop/package.json.orig -+++ b/Signal-Desktop/package.json -@@ -538,10 +538,7 @@ - { - "from": "build/compact-locales", - "to": "_locales", -- "filter": [ -- "**/values.json", -- "keys.json" -- ] -+ "filter": "**/messages.json" - }, - "js/**", - "libtextsecure/**", -diff --git a/Signal-Desktop/app/locale.ts.orig b/Signal-Desktop/app/locale.ts -index a63eef4079d..2a959da4d0d 100644 ---- a/Signal-Desktop/app/locale.ts.orig -+++ b/Signal-Desktop/app/locale.ts -@@ -1,9 +1,8 @@ - // Copyright 2017 Signal Messenger, LLC - // SPDX-License-Identifier: AGPL-3.0-only - --import { join } from 'node:path'; --import { readFileSync } from 'node:fs'; --import { app } from 'electron'; -+import { join } from 'path'; -+import { readFileSync } from 'fs'; - import lodash from 'lodash'; - import * as LocaleMatcher from '@formatjs/intl-localematcher'; - import { z } from 'zod'; -@@ -16,9 +15,6 @@ import type { LocalizerType } from '../ts/types/Util'; - import * as Errors from '../ts/types/errors'; - import { parseUnknown } from '../ts/util/schemas'; - --type CompactLocaleMessagesType = ReadonlyArray; --type CompactLocaleKeysType = ReadonlyArray; -- - const TextInfoSchema = z.object({ - direction: z.enum(['ltr', 'rtl']), - }); -@@ -29,17 +25,6 @@ function getLocaleMessages(locale: string): LocaleMessagesType { - return JSON.parse(readFileSync(targetFile, 'utf-8')); - } - --function getCompactLocaleKeys(): CompactLocaleKeysType { -- const targetFile = join(__dirname, '..', '_locales', 'keys.json'); -- return JSON.parse(readFileSync(targetFile, 'utf-8')); --} -- --function getCompactLocaleValues(locale: string): CompactLocaleMessagesType { -- const targetFile = join(__dirname, '..', '_locales', locale, 'values.json'); -- -- return JSON.parse(readFileSync(targetFile, 'utf-8')); --} -- - export type LocaleDisplayNames = Record>; - export type CountryDisplayNames = Record>; - -@@ -154,42 +139,13 @@ export function load({ - - logger.info(`locale: Matched locale: ${matchedLocale}`); - -+ const matchedLocaleMessages = getLocaleMessages(matchedLocale); -+ const englishMessages = getLocaleMessages('en'); - const localeDisplayNames = getLocaleDisplayNames(); - const countryDisplayNames = getCountryDisplayNames(); - -- let finalMessages: LocaleMessagesType; -- if (app.isPackaged) { -- const matchedLocaleMessages = getCompactLocaleValues(matchedLocale); -- const englishMessages = getCompactLocaleValues('en'); -- const keys = getCompactLocaleKeys(); -- if (matchedLocaleMessages.length !== keys.length) { -- throw new Error( -- `Invalid "${matchedLocale}" entry count, ` + -- `${matchedLocaleMessages.length} != ${keys.length}` -- ); -- } -- if (englishMessages.length !== keys.length) { -- throw new Error( -- `Invalid "en" entry count, ${englishMessages.length} != ${keys.length}` -- ); -- } -- -- // We start with english, then overwrite that with anything present in locale -- finalMessages = Object.create(null); -- for (const [i, key] of keys.entries()) { -- finalMessages[key] = { -- messageformat: -- matchedLocaleMessages[i] ?? englishMessages[i] ?? undefined, -- }; -- } -- } else { -- const matchedLocaleMessages = getLocaleMessages(matchedLocale); -- const englishMessages = getLocaleMessages('en'); -- -- // We start with english, then overwrite that with anything present in locale -- finalMessages = merge(englishMessages, matchedLocaleMessages); -- } -- -+ // We start with english, then overwrite that with anything present in locale -+ const finalMessages = merge(englishMessages, matchedLocaleMessages); - const i18n = setupI18n(matchedLocale, finalMessages, { - renderEmojify: shouldNeverBeCalled, - }); -diff --git a/Signal-Desktop/ts/scripts/generate-compact-locales.ts.orig b/Signal-Desktop/ts/scripts/generate-compact-locales.ts -index 7187d287acc..9a17d638f44 100644 ---- a/Signal-Desktop/ts/scripts/generate-compact-locales.ts.orig -+++ b/Signal-Desktop/ts/scripts/generate-compact-locales.ts -@@ -3,49 +3,6 @@ - - import { readdir, mkdir, readFile, writeFile } from 'node:fs/promises'; - import { join, dirname } from 'node:path'; --import pMap from 'p-map'; --import { isLocaleMessageType } from '../util/setupI18nMain.js'; -- --async function compact({ -- sourceDir, -- targetDir, -- locale, -- keys, --}: { -- sourceDir: string; -- targetDir: string; -- locale: string; -- keys: ReadonlyArray; --}): Promise> { -- const sourcePath = join(sourceDir, locale, 'messages.json'); -- const targetPath = join(targetDir, locale, 'values.json'); -- -- await mkdir(dirname(targetPath), { recursive: true }); -- -- const json = JSON.parse(await readFile(sourcePath, 'utf8')); -- -- const result = new Array(); -- for (const key of keys) { -- if (json[key] == null) { -- // Pull English translation, or leave blank (string was deleted) -- result.push(null); -- continue; -- } -- -- const value = json[key]; -- if (!isLocaleMessageType(value)) { -- continue; -- } -- if (value.messageformat == null) { -- continue; -- } -- result.push(value.messageformat); -- } -- -- await writeFile(targetPath, JSON.stringify(result)); -- -- return keys; --} - - async function main(): Promise { - const rootDir = join(__dirname, '..', '..'); -@@ -54,27 +11,30 @@ async function main(): Promise { - - const locales = await readdir(sourceDir); - -- const allKeys = await pMap( -- locales, -- async locale => { -+ await Promise.all( -+ locales.map(async locale => { - const sourcePath = join(sourceDir, locale, 'messages.json'); -- const json = JSON.parse(await readFile(sourcePath, 'utf8')); -- return Object.entries(json) -- .filter(([, value]) => isLocaleMessageType(value)) -- .map(([key]) => key); -- }, -- { concurrency: 10 } -- ); -+ const targetPath = join(targetDir, locale, 'messages.json'); - -- // Sort keys alphabetically for better incremental updates. -- const keys = Array.from(new Set(allKeys.flat())).sort(); -- await mkdir(targetDir, { recursive: true }); -- await writeFile(join(targetDir, 'keys.json'), JSON.stringify(keys)); -+ await mkdir(dirname(targetPath), { recursive: true }); - -- await pMap( -- locales, -- locale => compact({ sourceDir, targetDir, locale, keys }), -- { concurrency: 10 } -+ const json = JSON.parse(await readFile(sourcePath, 'utf8')); -+ for (const value of Object.values(json)) { -+ const typedValue = value as { description?: string }; -+ delete typedValue.description; -+ } -+ delete json.smartling; -+ -+ const entries = [...Object.entries(json)]; -+ -+ // Sort entries alphabetically for better incremental updates. -+ entries.sort(([a], [b]) => { -+ return a < b ? -1 : 1; -+ }); -+ -+ const result = Object.fromEntries(entries); -+ await writeFile(targetPath, JSON.stringify(result)); -+ }) - ); - } - diff --git a/backports/signal-desktop/signal-show-window-please.patch b/backports/signal-desktop/signal-show-window-please.patch index c8c5a65..39c8381 100644 --- a/backports/signal-desktop/signal-show-window-please.patch +++ b/backports/signal-desktop/signal-show-window-please.patch @@ -1,13 +1,11 @@ -diff --git a/Signal-Desktop/app/main.ts.orig b/Signal-Desktop/app/main.ts -index aa1bec8..bd7c1d5 100644 ---- a/Signal-Desktop/app/main.ts.orig -+++ b/Signal-Desktop/app/main.ts -@@ -690,7 +690,7 @@ async function createWindow() { - : DEFAULT_HEIGHT; +--- ./app/main.ts.orig ++++ ./app/main.ts +@@ -721,7 +721,7 @@ + const titleBarOverlay = await getTitleBarOverlay(); const windowOptions: Electron.BrowserWindowConstructorOptions = { - show: false, + show: true, - width, - height, + width: DEFAULT_WIDTH, + height: DEFAULT_HEIGHT, minWidth: MIN_WIDTH, diff --git a/backports/signal-desktop/signal-update-links.patch b/backports/signal-desktop/signal-update-links.patch index afd0b6b..39ec819 100644 --- a/backports/signal-desktop/signal-update-links.patch +++ b/backports/signal-desktop/signal-update-links.patch @@ -1,5 +1,5 @@ ---- ./Signal-Desktop/ts/components/DialogExpiredBuild.tsx.orig -+++ ./Signal-Desktop/ts/components/DialogExpiredBuild.tsx +--- ./ts/components/DialogExpiredBuild.tsx.orig ++++ ./ts/components/DialogExpiredBuild.tsx @@ -23,9 +23,9 @@ containerWidthBreakpoint={containerWidthBreakpoint} type="error" @@ -12,8 +12,8 @@ hasAction > {i18n('icu:expiredWarning')}{' '} ---- ./Signal-Desktop/ts/types/support.ts.orig -+++ ./Signal-Desktop/ts/types/support.ts +--- ./ts/types/support.ts.orig ++++ ./ts/types/support.ts @@ -1,7 +1,7 @@ // Copyright 2023 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only diff --git a/backports/signal-desktop/signal-use-system-sqlcipher.patch b/backports/signal-desktop/signal-use-system-sqlcipher.patch deleted file mode 100644 index 576ee66..0000000 --- a/backports/signal-desktop/signal-use-system-sqlcipher.patch +++ /dev/null @@ -1,29 +0,0 @@ -diff --git a/node-sqlcipher/binding.gyp.orig b/node-sqlcipher/binding.gyp -index 9a5caa2f713..8d3da54fea7 100644 ---- a/node-sqlcipher/binding.gyp.orig -+++ b/node-sqlcipher/binding.gyp -@@ -3,8 +3,15 @@ - 'targets': [ - { - 'target_name': 'node_sqlcipher', -+ 'include_dirs': [ -+ '/usr/include/sqlcipher', -+ ], -+ 'link_settings': { -+ 'libraries': [ -+ '-lsqlcipher', -+ ] -+ }, - 'dependencies': [ -- 'deps/sqlcipher/sqlcipher.gyp:sqlcipher', - 'deps/extension/extension.gyp:extension', - " SctpTransport() const { return sctp_transport_; } -+ scoped_refptr<::webrtc::SctpTransport> SctpTransport() const { -+ return sctp_transport_; -+ } - - // TODO(bugs.webrtc.org/9719): Delete method, update callers to use - // SctpTransport() instead. diff --git a/backports/signal-desktop/webrtc-gcc13.patch b/backports/signal-desktop/webrtc-gcc13.patch new file mode 100644 index 0000000..f27bc56 --- /dev/null +++ b/backports/signal-desktop/webrtc-gcc13.patch @@ -0,0 +1,20 @@ +--- ./rtc_base/system/file_wrapper.h.orig ++++ ./rtc_base/system/file_wrapper.h +@@ -13,6 +13,7 @@ + + #include + #include ++#include + + #include + +--- ./modules/audio_coding/neteq/reorder_optimizer.cc.orig ++++ ./modules/audio_coding/neteq/reorder_optimizer.cc +@@ -11,6 +11,7 @@ + #include "modules/audio_coding/neteq/reorder_optimizer.h" + + #include ++#include + #include + #include + diff --git a/backports/signal-desktop/webrtc-rtcbase-platform-thread-type-do-not-include-linux-prctl-header.patch b/backports/signal-desktop/webrtc-rtcbase-platform-thread-type-do-not-include-linux-prctl-header.patch deleted file mode 100644 index c2279a0..0000000 --- a/backports/signal-desktop/webrtc-rtcbase-platform-thread-type-do-not-include-linux-prctl-header.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/webrtc/rtc_base/platform_thread_types.cc.orig b/webrtc/rtc_base/platform_thread_types.cc -index 20bf4af..482b15f 100644 ---- a/webrtc/rtc_base/platform_thread_types.cc.orig -+++ b/webrtc/rtc_base/platform_thread_types.cc -@@ -12,7 +12,6 @@ - - // IWYU pragma: begin_keep - #if defined(WEBRTC_LINUX) --#include - #include - #include - diff --git a/backports/signal-desktop/webrtc-shared-libs.patch b/backports/signal-desktop/webrtc-shared-libs.patch deleted file mode 100644 index 04b55c0..0000000 --- a/backports/signal-desktop/webrtc-shared-libs.patch +++ /dev/null @@ -1,78 +0,0 @@ ---- ./webrtc/BUILD.gn.orig -+++ ./webrtc/BUILD.gn -@@ -38,7 +38,7 @@ - # 'ninja default' and then 'ninja all', the second build should do no work. - group("default") { - testonly = true -- deps = [ ":webrtc" ] -+ deps = [ ":signaldeswebrtc" ] - if (rtc_build_examples) { - deps += [ "examples" ] - } -@@ -464,7 +464,7 @@ - - if (!build_with_chromium) { - # Target to build all the WebRTC production code. -- rtc_static_library("webrtc") { -+ rtc_shared_library("signaldeswebrtc") { - # Only the root target and the test should depend on this. - visibility = [ - "//:default", -@@ -530,7 +530,6 @@ if (!build_with_chromium) { - - sources = [] - -- complete_static_lib = true - suppressed_configs += [ "//build/config/compiler:thin_archive" ] - defines = [] - -diff --git a/webrtc/third_party/googletest/BUILD.gn.orig b/webrtc/third_party/googletest/BUILD.gn -index 14089f0..b7dc621 100644 ---- a/webrtc/third_party/googletest/BUILD.gn.orig -+++ b/webrtc/third_party/googletest/BUILD.gn -@@ -48,7 +48,6 @@ config("gtest_config") { - - configs = [ - "//third_party/abseil-cpp:absl_include_config", -- "//third_party/re2:re2_config", - ] - } - -diff --git a/webrtc/third_party/googletest/BUILD.gn.orig b/webrtc/third_party/googletest/BUILD.gn -index b7dc621..367f929 100644 ---- a/webrtc/third_party/googletest/BUILD.gn.orig -+++ b/webrtc/third_party/googletest/BUILD.gn -@@ -129,7 +128,6 @@ source_set("gtest") { - - # googletest only needs `absl`, but this makes gn check happier. - deps = [ "//third_party/abseil-cpp:absl_full" ] -- public_deps = [ "//third_party/re2" ] - if (!build_with_chromium) { - defines += [ "GTEST_DISABLE_PRINT_STACK_TRACE" ] - sources -= [ -diff --git a/webrtc/third_party/fuzztest/BUILD.gn.orig b/webrtc/third_party/fuzztest/BUILD.gn -index 57ee790..ba1d297 100644 ---- a/webrtc/third_party/fuzztest/BUILD.gn.orig -+++ b/webrtc/third_party/fuzztest/BUILD.gn -@@ -309,7 +309,6 @@ source_set("fuzztest_internal") { - # For RE2 mutators. It's questionable whether we want to pull this library - # into every fuzztest target, but this is the approach used in other - # fuzztest contexts so we'll do the same -- "//third_party/re2", - - # For protobuf mutators - "$protobuf_target_prefix:protobuf_lite", -diff --git a/webrtc/third_party/BUILD.gn b/webrtc/third_party/BUILD.gn -index 256fd092e2e..4ce797ebad7 100644 ---- a/webrtc/third_party/BUILD.gn -+++ b/webrtc/third_party/BUILD.gn -@@ -71,8 +69,5 @@ component("freetype_harfbuzz") { - - buildflag_header("freetype_buildflags") { - header = "freetype_buildflags.h" -- flags = [ -- "USE_SYSTEM_FREETYPE=$use_system_freetype", -- "ENABLE_FREETYPE=$enable_freetype", -- ] -+ flags = [ "USE_SYSTEM_FREETYPE=$use_system_freetype" ] - } diff --git a/backports/signal-desktop/webrtc-shared-like-my-wife.patch b/backports/signal-desktop/webrtc-shared-like-my-wife.patch new file mode 100644 index 0000000..bd7115a --- /dev/null +++ b/backports/signal-desktop/webrtc-shared-like-my-wife.patch @@ -0,0 +1,28 @@ +--- ./BUILD.gn.orig ++++ ./BUILD.gn +@@ -38,7 +38,7 @@ + # 'ninja default' and then 'ninja all', the second build should do no work. + group("default") { + testonly = true +- deps = [ ":webrtc" ] ++ deps = [ ":signaldeswebrtc" ] + if (rtc_build_examples) { + deps += [ "examples" ] + } +@@ -464,7 +464,7 @@ + + if (!build_with_chromium) { + # Target to build all the WebRTC production code. +- rtc_static_library("webrtc") { ++ rtc_shared_library("signaldeswebrtc") { + # Only the root target and the test should depend on this. + visibility = [ + "//:default", +@@ -472,7 +472,6 @@ + ] + + sources = [] +- complete_static_lib = true + suppressed_configs += [ "//build/config/compiler:thin_archive" ] + defines = [] + diff --git a/backports/signal-desktop/webrtc-use-only-payloadtypesuggester-for-pt-assignement.patch b/backports/signal-desktop/webrtc-use-only-payloadtypesuggester-for-pt-assignement.patch deleted file mode 100644 index 1504f81..0000000 --- a/backports/signal-desktop/webrtc-use-only-payloadtypesuggester-for-pt-assignement.patch +++ /dev/null @@ -1,459 +0,0 @@ -diff --git a/webrtc/pc/codec_vendor.cc b/webrtc/pc/codec_vendor.cc -index 42d52f6..e45516c 100644 ---- a/webrtc/pc/codec_vendor.cc -+++ b/webrtc/pc/codec_vendor.cc -@@ -39,7 +39,6 @@ - #include "pc/rtp_media_utils.h" - #include "pc/session_description.h" - #include "pc/typed_codec_vendor.h" --#include "pc/used_ids.h" - #include "rtc_base/checks.h" - #include "rtc_base/logging.h" - #include "rtc_base/string_encode.h" -@@ -54,11 +53,6 @@ - - namespace { - --using webrtc::PayloadTypeSuggester; --using webrtc::RTCError; --using webrtc::RTCErrorOr; --using webrtc::RtpTransceiverDirection; -- - bool IsRtxCodec(const RtpCodecCapability& capability) { - return absl::EqualsIgnoreCase(capability.name, kRtxCodecName); - } -@@ -75,8 +69,7 @@ - std::optional FindMatchingCodec(const CodecList& codecs1, - const CodecList& codecs2, - const Codec& codec_to_match) { -- return webrtc::FindMatchingCodec(codecs1.codecs(), codecs2.codecs(), -- codec_to_match); -+ return FindMatchingCodec(codecs1.codecs(), codecs2.codecs(), codec_to_match); - } - - void StripCNCodecs(CodecList& audio_codecs) { -@@ -105,7 +98,7 @@ - } - - int associated_pt; -- if (!webrtc::FromString(associated_pt_str, &associated_pt)) { -+ if (!FromString(associated_pt_str, &associated_pt)) { - RTC_LOG(LS_WARNING) << "Couldn't convert payload type " << associated_pt_str - << " of RTX codec " << rtx_codec.id - << " to an integer."; -@@ -136,14 +129,14 @@ - return nullptr; - } - -- std::vector redundant_payloads = webrtc::split(fmtp, '/'); -+ std::vector redundant_payloads = split(fmtp, '/'); - if (redundant_payloads.size() < 2) { - return nullptr; - } - - absl::string_view associated_pt_str = redundant_payloads[0]; - int associated_pt; -- if (!webrtc::FromString(associated_pt_str, &associated_pt)) { -+ if (!FromString(associated_pt_str, &associated_pt)) { - RTC_LOG(LS_WARNING) << "Couldn't convert first payload type " - << associated_pt_str << " of RED codec " << red_codec.id - << " to an integer."; -@@ -182,7 +175,21 @@ - return suggestion.MoveError(); - } - codec.id = suggestion.value(); -- offered_codecs.push_back(codec); -+ // The rewrite of the parameter may have turned the codec into -+ // one that is already present. -+ bool skip = false; -+ for (const Codec& present_codec : offered_codecs) { -+ if (present_codec.id == codec.id) { -+ RTC_DCHECK(MatchesWithReferenceAttributes(present_codec, codec)) -+ << "Codec mismatch: present " << present_codec << ", new " -+ << codec; -+ skip = true; -+ break; -+ } -+ } -+ if (!skip) { -+ offered_codecs.push_back(codec); -+ } - } - } - -@@ -232,7 +239,7 @@ - } - std::string red_param = absl::StrCat(matching_codec->id); - red_codec.params[kCodecParamNotInNameValueFormat] = -- webrtc::StrJoin(std::vector{red_param, red_param}, "/"); -+ StrJoin(std::vector{red_param, red_param}, "/"); - } - RTCErrorOr suggestion = - pt_suggester.SuggestPayloadType(mid, red_codec); -@@ -240,84 +247,25 @@ - return suggestion.MoveError(); - } - red_codec.id = suggestion.value(); -- offered_codecs.push_back(red_codec); -+ // The rewrite of the parameter may have turned the RED codec into -+ // one that is already present. -+ bool skip = false; -+ for (const Codec& present_codec : offered_codecs) { -+ if (present_codec.id == red_codec.id) { -+ RTC_DCHECK(MatchesWithReferenceAttributes(present_codec, red_codec)); -+ skip = true; -+ break; -+ } -+ } -+ if (!skip) { -+ offered_codecs.push_back(red_codec); -+ } - } - } - offered_codecs.CheckConsistency(); - return RTCError::OK(); - } - --// Adds all codecs from `reference_codecs` to `offered_codecs` that don't --// already exist in `offered_codecs` and ensure the payload types don't --// collide. --// OLD VERSION - uses UsedPayloadTypes --void MergeCodecs(const CodecList& reference_codecs, -- CodecList& offered_codecs, -- UsedPayloadTypes* used_pltypes) { -- // Add all new codecs that are not RTX/RED codecs. -- // The two-pass splitting of the loops means preferring payload types -- // of actual codecs with respect to collisions. -- for (const Codec& reference_codec : reference_codecs) { -- if (reference_codec.GetResiliencyType() != Codec::ResiliencyType::kRtx && -- reference_codec.GetResiliencyType() != Codec::ResiliencyType::kRed && -- !FindMatchingCodec(reference_codecs, offered_codecs, reference_codec)) { -- Codec codec = reference_codec; -- used_pltypes->FindAndSetIdUsed(&codec); -- offered_codecs.push_back(codec); -- } -- } -- -- // Add all new RTX or RED codecs. -- for (const Codec& reference_codec : reference_codecs) { -- if (reference_codec.GetResiliencyType() == Codec::ResiliencyType::kRtx && -- !FindMatchingCodec(reference_codecs, offered_codecs, reference_codec)) { -- Codec rtx_codec = reference_codec; -- const Codec* associated_codec = -- GetAssociatedCodecForRtx(reference_codecs, rtx_codec); -- if (!associated_codec) { -- continue; -- } -- // Find a codec in the offered list that matches the reference codec. -- // Its payload type may be different than the reference codec. -- std::optional matching_codec = FindMatchingCodec( -- reference_codecs, offered_codecs, *associated_codec); -- if (!matching_codec) { -- RTC_LOG(LS_WARNING) -- << "Couldn't find matching " << associated_codec->name << " codec."; -- continue; -- } -- -- rtx_codec.params[kCodecParamAssociatedPayloadType] = -- absl::StrCat(matching_codec->id); -- used_pltypes->FindAndSetIdUsed(&rtx_codec); -- offered_codecs.push_back(rtx_codec); -- } else if (reference_codec.GetResiliencyType() == -- Codec::ResiliencyType::kRed && -- !FindMatchingCodec(reference_codecs, offered_codecs, -- reference_codec)) { -- Codec red_codec = reference_codec; -- const Codec* associated_codec = -- GetAssociatedCodecForRed(reference_codecs, red_codec); -- if (associated_codec) { -- std::optional matching_codec = FindMatchingCodec( -- reference_codecs, offered_codecs, *associated_codec); -- if (!matching_codec) { -- RTC_LOG(LS_WARNING) << "Couldn't find matching " -- << associated_codec->name << " codec."; -- continue; -- } -- -- red_codec.params[kCodecParamNotInNameValueFormat] = -- absl::StrCat(matching_codec->id) + "/" + -- absl::StrCat(matching_codec->id); -- } -- used_pltypes->FindAndSetIdUsed(&red_codec); -- offered_codecs.push_back(red_codec); -- } -- } -- offered_codecs.CheckConsistency(); --} -- - // `codecs` is a full list of codecs with correct payload type mappings, which - // don't conflict with mappings of the other media type; `supported_codecs` is - // a list filtered for the media section`s direction but with default payload -@@ -382,7 +330,7 @@ - codec.params.find(kCodecParamNotInNameValueFormat); - if (fmtp != codec.params.end()) { - std::vector redundant_payloads = -- webrtc::split(fmtp->second, '/'); -+ split(fmtp->second, '/'); - if (!redundant_payloads.empty() && - redundant_payloads[0] == id) { - if (!red_was_added) { -@@ -443,7 +391,7 @@ - for (const Codec& supported_codec : supported_codecs) { - if (absl::EqualsIgnoreCase(supported_codec.name, kH265CodecName)) { - std::optional supported_ptl = -- webrtc::ParseSdpForH265ProfileTierLevel(supported_codec.params); -+ ParseSdpForH265ProfileTierLevel(supported_codec.params); - if (supported_ptl.has_value()) { - supported_h265_profiles[supported_ptl->profile] = - supported_ptl->level; -@@ -458,14 +406,14 @@ - for (auto& filtered_codec : filtered_codecs) { - if (absl::EqualsIgnoreCase(filtered_codec.name, kH265CodecName)) { - std::optional filtered_ptl = -- webrtc::ParseSdpForH265ProfileTierLevel(filtered_codec.params); -+ ParseSdpForH265ProfileTierLevel(filtered_codec.params); - if (filtered_ptl.has_value()) { - auto it = supported_h265_profiles.find(filtered_ptl->profile); - - if (it != supported_h265_profiles.end() && - filtered_ptl->level != it->second) { - filtered_codec.params[kH265FmtpLevelId] = -- webrtc::H265LevelToString(it->second); -+ H265LevelToString(it->second); - } - } - } -@@ -506,13 +454,13 @@ - } - } - if (absl::EqualsIgnoreCase(ours.name, kH264CodecName)) { -- webrtc::H264GenerateProfileLevelIdForAnswer(ours.params, theirs->params, -- &negotiated.params); -+ H264GenerateProfileLevelIdForAnswer(ours.params, theirs->params, -+ &negotiated.params); - } - #ifdef RTC_ENABLE_H265 - if (absl::EqualsIgnoreCase(ours.name, kH265CodecName)) { -- webrtc::H265GenerateProfileTierLevelForAnswer( -- ours.params, theirs->params, &negotiated.params); -+ H265GenerateProfileTierLevelForAnswer(ours.params, theirs->params, -+ &negotiated.params); - NegotiateTxMode(ours, *theirs, &negotiated); - } - #endif -@@ -534,7 +482,7 @@ - continue; - } - int apt_value; -- if (!webrtc::FromString(apt_str, &apt_value)) { -+ if (!FromString(apt_str, &apt_value)) { - RTC_LOG(LS_WARNING) << "Unconvertable apt value"; - continue; - } -@@ -634,9 +582,11 @@ - } - // Add our codecs that are not in the current description. - if (media_description_options.type == MediaType::AUDIO) { -- MergeCodecs(all_audio_codecs(), mid, codecs, pt_suggester); -+ MergeCodecs(audio_recv_codecs(), mid, codecs, pt_suggester); -+ MergeCodecs(audio_send_codecs(), mid, codecs, pt_suggester); - } else { -- MergeCodecs(all_video_codecs(), mid, codecs, pt_suggester); -+ MergeCodecs(video_recv_codecs(), mid, codecs, pt_suggester); -+ MergeCodecs(video_send_codecs(), mid, codecs, pt_suggester); - } - CodecList filtered_codecs; - CodecList supported_codecs = -@@ -667,20 +617,11 @@ - const MediaContentDescription* mcd = - current_content->media_description(); - for (const Codec& codec : mcd->codecs()) { -- if (webrtc::FindMatchingCodec(mcd->codecs(), codecs.codecs(), -- codec)) { -+ if (FindMatchingCodec(mcd->codecs(), codecs.codecs(), codec)) { - filtered_codecs.push_back(codec); - } - } - } -- // Note what PTs are already in use. -- UsedPayloadTypes -- used_pltypes; // Used to avoid pt collisions in filtered_codecs -- for (auto& codec : filtered_codecs) { -- // Note: This may change PTs. Doing so woud indicate an error, but -- // UsedPayloadTypes doesn't offer a means to make the distinction. -- used_pltypes.FindAndSetIdUsed(&codec); -- } - // Add other supported codecs. - for (const Codec& codec : supported_codecs) { - std::optional found_codec = -@@ -707,8 +648,11 @@ - changed_referenced_codec->id); - } - } -- // Quick fix for b/395077842: Remap the codec if it collides. -- used_pltypes.FindAndSetIdUsed(&(*found_codec)); -+ auto pt_or_error = pt_suggester.SuggestPayloadType(mid, *found_codec); -+ if (!pt_or_error.ok()) { -+ return pt_or_error.MoveError(); -+ } -+ found_codec->id = pt_or_error.value(); - filtered_codecs.push_back(*found_codec); - } - } -@@ -763,9 +707,11 @@ - } - // Add all our supported codecs - if (media_description_options.type == MediaType::AUDIO) { -- MergeCodecs(all_audio_codecs(), mid, codecs, pt_suggester); -+ MergeCodecs(audio_recv_codecs(), mid, codecs, pt_suggester); -+ MergeCodecs(audio_send_codecs(), mid, codecs, pt_suggester); - } else { -- MergeCodecs(all_video_codecs(), mid, codecs, pt_suggester); -+ MergeCodecs(video_recv_codecs(), mid, codecs, pt_suggester); -+ MergeCodecs(video_send_codecs(), mid, codecs, pt_suggester); - } - CodecList filtered_codecs; - CodecList negotiated_codecs; -@@ -794,8 +740,8 @@ - const MediaContentDescription* mcd = - current_content->media_description(); - for (const Codec& codec : mcd->codecs()) { -- if (std::optional found_codec = webrtc::FindMatchingCodec( -- mcd->codecs(), codecs.codecs(), codec)) { -+ if (std::optional found_codec = -+ FindMatchingCodec(mcd->codecs(), codecs.codecs(), codec)) { - filtered_codecs.push_back(*found_codec); - } - } -@@ -913,8 +859,7 @@ - case RtpTransceiverDirection::kSendRecv: - case RtpTransceiverDirection::kStopped: - case RtpTransceiverDirection::kInactive: -- return GetVideoCodecsForOffer( -- webrtc::RtpTransceiverDirectionReversed(offer)); -+ return GetVideoCodecsForOffer(RtpTransceiverDirectionReversed(offer)); - case RtpTransceiverDirection::kSendOnly: - return video_send_codecs_.codecs(); - case RtpTransceiverDirection::kRecvOnly: -@@ -948,8 +893,7 @@ - case RtpTransceiverDirection::kSendRecv: - case RtpTransceiverDirection::kStopped: - case RtpTransceiverDirection::kInactive: -- return GetAudioCodecsForOffer( -- webrtc::RtpTransceiverDirectionReversed(offer)); -+ return GetAudioCodecsForOffer(RtpTransceiverDirectionReversed(offer)); - case RtpTransceiverDirection::kSendOnly: - return audio_send_codecs_.codecs(); - case RtpTransceiverDirection::kRecvOnly: -@@ -958,43 +902,6 @@ - RTC_CHECK_NOTREACHED(); - } - --CodecList CodecVendor::all_video_codecs() const { -- CodecList all_codecs; -- UsedPayloadTypes used_payload_types; -- for (const Codec& codec : video_recv_codecs_.codecs()) { -- Codec codec_mutable = codec; -- used_payload_types.FindAndSetIdUsed(&codec_mutable); -- all_codecs.push_back(codec_mutable); -- } -- -- // Use MergeCodecs to merge the second half of our list as it already checks -- // and fixes problems with duplicate payload types. -- MergeCodecs(video_send_codecs_.codecs(), all_codecs, &used_payload_types); -- -- return all_codecs; --} -- --CodecList CodecVendor::all_audio_codecs() const { -- // Compute the audio codecs union. -- CodecList codecs; -- for (const Codec& send : audio_send_codecs_.codecs()) { -- codecs.push_back(send); -- if (!FindMatchingCodec(audio_send_codecs_.codecs(), -- audio_recv_codecs_.codecs(), send)) { -- // It doesn't make sense to have an RTX codec we support sending but not -- // receiving. -- RTC_DCHECK(send.GetResiliencyType() != Codec::ResiliencyType::kRtx); -- } -- } -- for (const Codec& recv : audio_recv_codecs_.codecs()) { -- if (!FindMatchingCodec(audio_recv_codecs_.codecs(), -- audio_send_codecs_.codecs(), recv)) { -- codecs.push_back(recv); -- } -- } -- return codecs; --} -- - CodecList CodecVendor::audio_sendrecv_codecs() const { - // Use NegotiateCodecs to merge our codec lists, since the operation is - // essentially the same. Put send_codecs as the offered_codecs, which is the -diff --git a/webrtc/pc/wcodec_vendor.h b/webrtc/pc/codec_vendor.h -index 1472225..4a3a8d9 100644 ---- a/webrtc/pc/codec_vendor.h -+++ b/webrtc/pc/codec_vendor.h -@@ -102,9 +102,6 @@ - const RtpTransceiverDirection& offer, - const RtpTransceiverDirection& answer) const; - -- CodecList all_video_codecs() const; -- CodecList all_audio_codecs() const; -- - TypedCodecVendor audio_send_codecs_; - TypedCodecVendor audio_recv_codecs_; - -diff --git a/webrtc/pc/used_ids.h b/webrtc/pc/used_ids.h -index fe80531..f9d825c 100644 ---- a/webrtc/pc/used_ids.h -+++ b/webrtc/pc/used_ids.h -@@ -14,7 +14,6 @@ - #include - - #include "api/rtp_parameters.h" --#include "media/base/codec.h" - #include "rtc_base/checks.h" - - namespace webrtc { -@@ -88,41 +86,6 @@ - std::set id_set_; - }; - --// Helper class used for finding duplicate RTP payload types among audio, video --// and data codecs. When bundle is used the payload types may not collide. --class UsedPayloadTypes : public UsedIds { -- public: -- UsedPayloadTypes() -- : UsedIds(kFirstDynamicPayloadTypeLowerRange, -- kLastDynamicPayloadTypeUpperRange) {} -- -- // Check if a payload type is valid. The range [64-95] is forbidden -- // when rtcp-mux is used. -- static bool IsIdValid(Codec codec, bool rtcp_mux) { -- if (rtcp_mux && (codec.id > kLastDynamicPayloadTypeLowerRange && -- codec.id < kFirstDynamicPayloadTypeUpperRange)) { -- return false; -- } -- return codec.id >= 0 && codec.id <= kLastDynamicPayloadTypeUpperRange; -- } -- -- protected: -- bool IsIdUsed(int new_id) override { -- // Range marked for RTCP avoidance is "used". -- if (new_id > kLastDynamicPayloadTypeLowerRange && -- new_id < kFirstDynamicPayloadTypeUpperRange) -- return true; -- return UsedIds::IsIdUsed(new_id); -- } -- -- private: -- static const int kFirstDynamicPayloadTypeLowerRange = 35; -- static const int kLastDynamicPayloadTypeLowerRange = 63; -- -- static const int kFirstDynamicPayloadTypeUpperRange = 96; -- static const int kLastDynamicPayloadTypeUpperRange = 127; --}; -- - // Helper class used for finding duplicate RTP Header extension ids among - // audio and video extensions. - class UsedRtpHeaderExtensionIds : public UsedIds { diff --git a/backports/soqt/APKBUILD b/backports/soqt/APKBUILD new file mode 100644 index 0000000..778776e --- /dev/null +++ b/backports/soqt/APKBUILD @@ -0,0 +1,30 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +pkgname=soqt +pkgver=1.6.0 +pkgrel=0 +pkgdesc="GUI binding library for coin" +url="https://github.com/coin3d/soqt" +arch="all" +license="BSD-3-Clause" +makedepends="coin-dev cmake mesa-dev qt5-qtbase-dev" +options="!check" # test suite consists only of interactive programs +subpackages="$pkgname-dev $pkgname-doc" +source="https://github.com/coin3d/soqt/releases/download/SoQt-$pkgver/soqt-$pkgver-src.tar.gz" +builddir="$srcdir/$pkgname" + +build() { + cmake -B build . \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=None \ + -DSOQT_BUILD_DOC_MAN=ON + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} + +sha512sums=" +4221e98f51cca4dda23043428e869b60ab4d994710f97c0f44cd82631ffad2bd8bbaf0b820434a4636892df663d66ecd2aec14b185972671b2d22c0fe242b553 soqt-1.6.0-src.tar.gz +" diff --git a/backports/thelounge/APKBUILD b/backports/thelounge/APKBUILD deleted file mode 100644 index 22b5565..0000000 --- a/backports/thelounge/APKBUILD +++ /dev/null @@ -1,84 +0,0 @@ -# Contributor: Kay Thomas -# Contributor: Fabricio Silva -# Maintainer: Fabricio Silva -pkgname=thelounge -pkgver=4.4.3 -pkgrel=0 -pkgdesc="Modern, responsive, cross-platform, self-hosted web IRC client" -url="https://thelounge.chat" -# build broken against node 24 -#arch="all !riscv64" # riscv64 gets SIGILL -license="MIT" -depends="nodejs" -makedepends="yarn py3-setuptools" -subpackages="$pkgname-openrc $pkgname-doc" -install="$pkgname.pre-install $pkgname.post-install" -source=" - $pkgname-$pkgver.tar.gz::https://github.com/thelounge/thelounge/archive/v$pkgver.tar.gz - thelounge.initd - thelounge.confd - " -options="net" # net for npm - -case $CARCH in - # loongarch64: 2 tests failed on the builder - # 1) SQLite Message Storage: should retrieve latest LIMIT messages in order - # 2) SQLite Message Storage: should search messages - loongarch64) options="$options !check";; -esac - -prepare() { - default_prepare - - export BROWSERSLIST_IGNORE_OLD_DATA=true - # to build npm/sqlite3 from source - export npm_config_build_from_source=true - yarn install --frozen-lockfile -} - -build() { - NODE_ENV=production yarn build - - # these are the same file - ln -sf ../package.json ./dist/package.json - # set home location - echo "/var/lib/thelounge" >.thelounge_home -} - -check() { - # skips tests that checks if version is using "source" and "git sha" - yarn test:mocha --grep "\#getVersion" --invert -} - -package() { - # cleanup unused files (cant be done before check) - yarn install --production --ignore-scripts --prefer-offline - find ./ -type f \( \ - -iname "*.ts" -o -iname "*.map" -o -iname "*.md" -o -iname "*.sh" -o \ - -iname "babel.config*" -o -iname "webpack.config*" -o -iname "tsconfig*" \ - \) -delete - find ./node_modules -type f \( \ - -iname "Makefile*" -o -iname "README*" -o -iname "LICENSE*" -o -iname "CHANGELOG*" \ - \) -delete - find ./node_modules -type d \( \ - -iname "test" -o -iname "node-gyp" -o -iname ".github" \ - \) -prune -exec rm -rf {} \; - - install -dm755 "$pkgdir"/usr/share/webapps/thelounge - install -Dm755 index.js -t "$pkgdir"/usr/share/webapps/thelounge/ - install -Dm644 package.json .thelounge_home -t "$pkgdir"/usr/share/webapps/thelounge/ - install -Dm644 client/index.html.tpl -t "$pkgdir"/usr/share/webapps/thelounge/client/ - cp -a node_modules public dist "$pkgdir"/usr/share/webapps/thelounge/ - mkdir -p "$pkgdir"/usr/bin - ln -sf ../share/webapps/thelounge/index.js "$pkgdir"/usr/bin/thelounge - - install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/thelounge/ - install -Dm755 "$srcdir"/$pkgname.initd "$pkgdir"/etc/init.d/$pkgname - install -Dm755 "$srcdir"/$pkgname.confd "$pkgdir"/etc/conf.d/$pkgname -} - -sha512sums=" -d1a873b15b5ac003c59257c591030ebeb8810609ea646477cc319ddb82fa2842b0b71f3edfe60eb5b54749ed90d55074d5b82ab6312b55cccee8281057b425f2 thelounge-4.4.3.tar.gz -126913f79c3eda7c0e6f2f792ce8a799e2100259b62de57c97329f079072e3d8d81c5591b08b99630803c9e320c85c8e34ac7ffe2ddba7f2982a5ba958960789 thelounge.initd -2c44963a1e4303a6045b80df0931bb636150cb7b1f14d536c3624bb6dacfabfa08d7ea4e261e40245b80eedbb53a47fbf73672a02c865295300c5121fb83a558 thelounge.confd -" diff --git a/backports/thelounge/thelounge.confd b/backports/thelounge/thelounge.confd deleted file mode 100644 index a7e59bd..0000000 --- a/backports/thelounge/thelounge.confd +++ /dev/null @@ -1,9 +0,0 @@ -# thelounge configuration options - -command_user="thelounge:thelounge" # user:group -supervisor="supervise-daemon" -directory="/var/lib/thelounge" - -logdir="/var/log/thelounge" -output_log="$logdir/output.log" -error_log="$logdir/error.log" diff --git a/backports/thelounge/thelounge.initd b/backports/thelounge/thelounge.initd deleted file mode 100644 index fc00ef8..0000000 --- a/backports/thelounge/thelounge.initd +++ /dev/null @@ -1,34 +0,0 @@ -#!/sbin/openrc-run - -# fallback values for /etc/conf.d/thelounge -: ${command_user:=thelounge:thelounge} -: ${directory:=/var/lib/thelounge} -: ${logdir:=/var/log/thelounge} - -name="thelounge" -command="/usr/bin/thelounge" -command_args="start" -command_background=true -pidfile="/run/thelounge.pid" - -depend() { - need net - use dns - after firewall -} - -start_pre() { - checkpath -d -o "$command_user" "$directory" - - if [ -n "$logdir" ]; then - checkpath -d -o "$command_user" "$logdir" - fi - - if [ -n "$output_log" ]; then - checkpath -f -o "$command_user" "$output_log" - fi - - if [ -n "$error_log" ]; then - checkpath -f -o "$command_user" "$error_log" - fi -} diff --git a/backports/thelounge/thelounge.post-install b/backports/thelounge/thelounge.post-install deleted file mode 100644 index b08cddb..0000000 --- a/backports/thelounge/thelounge.post-install +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -cat >&2 <<-EOF -* -* The configuration will be placed at /var/lib/thelounge/config.js after first run -* To add users, use the cli: doas -u thelounge thelounge add myuser -* -EOF - -exit 0 diff --git a/backports/thelounge/thelounge.pre-install b/backports/thelounge/thelounge.pre-install deleted file mode 100644 index dd54b45..0000000 --- a/backports/thelounge/thelounge.pre-install +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -addgroup -S thelounge 2>/dev/null -adduser -S -D -h /var/lib/thelounge -s /sbin/nologin -G thelounge -g thelounge thelounge 2>/dev/null - -exit 0 diff --git a/backports/uranium/874_fix-simplebutton-use-of-um-colorimage.patch b/backports/uranium/874_fix-simplebutton-use-of-um-colorimage.patch new file mode 100644 index 0000000..3112c9c --- /dev/null +++ b/backports/uranium/874_fix-simplebutton-use-of-um-colorimage.patch @@ -0,0 +1,34 @@ +From 88fd460a63263d66173f1e0127b0f208577d7f4e Mon Sep 17 00:00:00 2001 +Patch-Source: https://github.com/Ultimaker/Uranium/pull/874 +From: fieldOfView +Date: Sat, 20 May 2023 21:14:36 +0200 +Subject: [PATCH] Fix SimpleButton use of UM.ColorImage + +Fixes https://github.com/Ultimaker/Cura/issues/15524 +--- + UM/Qt/qml/UM/SimpleButton.qml | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/UM/Qt/qml/UM/SimpleButton.qml b/UM/Qt/qml/UM/SimpleButton.qml +index d3d398753c..d3bd0e8e14 100644 +--- a/UM/Qt/qml/UM/SimpleButton.qml ++++ b/UM/Qt/qml/UM/SimpleButton.qml +@@ -1,7 +1,8 @@ +-// Copyright (c) 2018 Ultimaker B.V. ++// Copyright (c) 2023 Ultimaker B.V. + // Uranium is released under the terms of the LGPLv3 or higher. + + import QtQuick 2.1 ++import UM 1.5 as UM + + MouseArea + { +@@ -27,7 +28,7 @@ MouseArea + radius: 0 + } + +- ColorImage ++ UM.ColorImage + { + id: image + diff --git a/backports/uranium/APKBUILD b/backports/uranium/APKBUILD new file mode 100644 index 0000000..2b98a85 --- /dev/null +++ b/backports/uranium/APKBUILD @@ -0,0 +1,61 @@ +# Contributor: Anjandev Momi +# Maintainer: Anjandev Momi +pkgname=uranium +pkgver=5.2.2 +pkgrel=3 +pkgdesc="A Python framework for building Desktop applications" +url="https://github.com/Ultimaker/Uranium" +arch="noarch !armhf !riscv64" # armhf: no py3-qt5, rv64: no py3-shapely +license="LGPL-3.0-or-later" +depends=" + py3-cryptography + py3-numpy + py3-qt6 + py3-scipy + python3 + " +# add cura-binary-data to makedepends when packaged +makedepends="samurai cmake doxygen gettext-dev graphviz" +checkdepends="py3-pytest py3-pytest-benchmark py3-twisted" +options="!check" # checks broken from 5.x onward +source="$pkgname-$pkgver.tar.gz::https://github.com/Ultimaker/Uranium/archive/refs/tags/$pkgver.tar.gz + cmake.patch + 874_fix-simplebutton-use-of-um-colorimage.patch + fix-logger-used-but-not-imported.patch + qt-try-ints-then-bytes.patch + cmake-helpers.patch" +builddir="$srcdir/Uranium-$pkgver" + +build() { + if [ "$CBUILD" != "$CHOST" ]; then + CMAKE_CROSSOPTS="-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_HOST_SYSTEM_NAME=Linux" + fi + cmake -B build -G Ninja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DCMAKE_BUILD_TYPE=MinSizeRel \ + -DGETTEXT_MSGINIT_EXECUTABLE=msginit \ + -DCURA_BINARY_DATA_DIRECTORY=/usr/share/cura \ + $CMAKE_CROSSOPTS + cmake --build build +} + +check() { + # useless code style test with another dependency + ctest -j $JOBS --output-on-failure -T Test +} + +package() { + DESTDIR="$pkgdir" cmake --install build + mkdir "$pkgdir"/usr/share/uranium/cmake + mv "$pkgdir"/usr/share/cmake-*/Modules/* "$pkgdir"/usr/share/uranium/cmake/ +} + +sha512sums=" +a9c222400022e05b5c42c72843b024204a58f5d233805bdffa610a2d9cbd1873773868b049aabbe52c6e859f235ca5428fcdfdbb86651f428483999060611e10 uranium-5.2.2.tar.gz +196a04164de288f5bffeebb73ace9390059dcffebaf40395368f413d1af2e2c668d85dd4c761ad226732540d41598235c2c368152cc157d2e89445ce27738c9b cmake.patch +c50b37a3a44c4d4f66d115e72a430b82a8125efa49ce51271d5cad7fac15b2941a6a82b71fd07cef751b159296b64d783b348cebe7dfd865f0121815d2cf41f4 874_fix-simplebutton-use-of-um-colorimage.patch +78e1415133bc4135f93633375bdb71a9e04b9cd128067d223985d0878f0e3de3ed1d336117fc527f0804b99878bd56817e3eb7a5aa545cc877b9f43386e17e78 fix-logger-used-but-not-imported.patch +26489638fcf80822d16b0a295aee21a8973c23a023b1daf7f2cf5f7be7c56e72a15edd87ac6993f8a2ad09086d7d1a8b7d32247522c9429183625e3a0b63f2ae qt-try-ints-then-bytes.patch +aa185ce3592036f045e3386266015cc08443c2e4f9b9a4c03c77c13525af98d68eaa3360e8858e0561417a826c73bf8a2b209bcad91d2cc16cce32fb0231fcf8 cmake-helpers.patch +" diff --git a/backports/uranium/cmake-helpers.patch b/backports/uranium/cmake-helpers.patch new file mode 100644 index 0000000..3c5d1f3 --- /dev/null +++ b/backports/uranium/cmake-helpers.patch @@ -0,0 +1,89 @@ +--- /dev/null ++++ ./cmake/UraniumPluginInstall.cmake +@@ -0,0 +1,86 @@ ++# Copyright (c) 2022 Ultimaker B.V. ++# UraniumPluginInstall.cmake is released under the terms of the LGPLv3 or higher. ++ ++# ++# This module detects all plugins that need to be installed and adds them using the CMake install() command. ++# It detects all plugin folder in the path "plugins/*" where there's a "plugin.json" in it. ++# ++# Plugins can be configured to NOT BE INSTALLED via the variable "UM_NO_INSTALL_PLUGINS" as a list of string in the ++# form of "a;b;c" or "a,b,c". By default all plugins will be installed. ++# ++ ++# Options or configuration variables ++set(UM_NO_INSTALL_PLUGINS "" CACHE STRING "A list of plugins that should not be installed, separated with ';' or ','.") ++ ++file(GLOB_RECURSE _plugin_json_list ${CMAKE_SOURCE_DIR}/plugins/*/plugin.json) ++list(LENGTH _plugin_json_list _plugin_json_list_len) ++ ++# Sort the lists alphabetically so we can handle cases like this: ++# - plugins/my_plugin/plugin.json ++# - plugins/my_plugin/my_module/plugin.json ++# In this case, only "plugins/my_plugin" should be added via install(). ++set(_no_install_plugin_list ${UM_NO_INSTALL_PLUGINS}) ++# Sanitize the string so the comparison will be case-insensitive. ++string(STRIP "${_no_install_plugin_list}" _no_install_plugin_list) ++string(TOLOWER "${_no_install_plugin_list}" _no_install_plugin_list) ++ ++# WORKAROUND counterpart of what's in cura-build. ++string(REPLACE "," ";" _no_install_plugin_list "${_no_install_plugin_list}") ++ ++list(LENGTH _no_install_plugin_list _no_install_plugin_list_len) ++ ++if(_no_install_plugin_list_len GREATER 0) ++ list(SORT _no_install_plugin_list) ++endif() ++if(_plugin_json_list_len GREATER 0) ++ list(SORT _plugin_json_list) ++endif() ++ ++# Check all plugin directories and add them via install() if needed. ++set(_install_plugin_list "") ++foreach(_plugin_json_path ${_plugin_json_list}) ++ get_filename_component(_plugin_dir ${_plugin_json_path} DIRECTORY) ++ file(RELATIVE_PATH _rel_plugin_dir ${CMAKE_CURRENT_SOURCE_DIR} ${_plugin_dir}) ++ get_filename_component(_plugin_dir_name ${_plugin_dir} NAME) ++ ++ # Make plugin name comparison case-insensitive ++ string(TOLOWER "${_plugin_dir_name}" _plugin_dir_name_lowercase) ++ ++ # Check if this plugin needs to be skipped for installation ++ set(_add_plugin ON) # Indicates if this plugin should be added to the build or not. ++ set(_is_no_install_plugin OFF) # If this plugin will not be added, this indicates if it's because the plugin is ++ # specified in the NO_INSTALL_PLUGINS list. ++ if(_no_install_plugin_list) ++ if("${_plugin_dir_name_lowercase}" IN_LIST _no_install_plugin_list) ++ set(_add_plugin OFF) ++ set(_is_no_install_plugin ON) ++ endif() ++ endif() ++ ++ # Make sure this is not a subdirectory in a plugin that's already in the install list ++ if(_add_plugin) ++ foreach(_known_install_plugin_dir ${_install_plugin_list}) ++ if(_plugin_dir MATCHES "${_known_install_plugin_dir}.+") ++ set(_add_plugin OFF) ++ break() ++ endif() ++ endforeach() ++ endif() ++ ++ if(_add_plugin) ++ message(STATUS "[+] PLUGIN TO INSTALL: ${_rel_plugin_dir}") ++ get_filename_component(_rel_plugin_parent_dir ${_rel_plugin_dir} DIRECTORY) ++ install(DIRECTORY ${_rel_plugin_dir} ++ DESTINATION lib${LIB_SUFFIX}/uranium/${_rel_plugin_parent_dir} ++ PATTERN "__pycache__" EXCLUDE ++ PATTERN "*.qmlc" EXCLUDE ++ ) ++ list(APPEND _install_plugin_list ${_plugin_dir}) ++ elseif(_is_no_install_plugin) ++ message(STATUS "[-] PLUGIN TO REMOVE : ${_rel_plugin_dir}") ++ execute_process(COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/mod_bundled_packages_json.py ++ -d ${CMAKE_CURRENT_SOURCE_DIR}/resources/bundled_packages ++ ${_plugin_dir_name} ++ RESULT_VARIABLE _mod_json_result) ++ endif() ++endforeach() diff --git a/backports/uranium/cmake.patch b/backports/uranium/cmake.patch new file mode 100644 index 0000000..b1a888b --- /dev/null +++ b/backports/uranium/cmake.patch @@ -0,0 +1,16 @@ +--- ./CMakeLists.txt.orig ++++ ./CMakeLists.txt +@@ -19,9 +19,12 @@ + # Build Translations + CREATE_TRANSLATION_TARGETS() + ++find_package(Python REQUIRED COMPONENTS Interpreter) + +-install(DIRECTORY UM DESTINATION "${Python_SITELIB_LOCAL}") ++install(DIRECTORY UM DESTINATION "${Python_SITELIB}") + + install(FILES ${CMAKE_SOURCE_DIR}/cmake/UraniumTranslationTools.cmake + DESTINATION ${CMAKE_INSTALL_DATADIR}/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/ ) + install(DIRECTORY resources DESTINATION ${CMAKE_INSTALL_DATADIR}/uranium) ++ ++include(UraniumPluginInstall) diff --git a/backports/uranium/fix-logger-used-but-not-imported.patch b/backports/uranium/fix-logger-used-but-not-imported.patch new file mode 100644 index 0000000..151893c --- /dev/null +++ b/backports/uranium/fix-logger-used-but-not-imported.patch @@ -0,0 +1,14 @@ +Patch-Source: https://src.fedoraproject.org/rpms/python-uranium/blob/rawhide/f/Uranium-5.3.0-qt-try-ints-then-bytes-for-gl-mask-functions.patch + +diff --git a/UM/View/SelectionPass.py.orig b/UM/View/SelectionPass.py +index 945b789..ef042a5 100644 +--- a/UM/View/SelectionPass.py.orig ++++ b/UM/View/SelectionPass.py +@@ -5,6 +5,7 @@ import enum + import random + from typing import TYPE_CHECKING + ++from UM.Logger import Logger + from UM.Resources import Resources + from UM.Application import Application + diff --git a/backports/uranium/qt-try-ints-then-bytes.patch b/backports/uranium/qt-try-ints-then-bytes.patch new file mode 100644 index 0000000..8f7d6db --- /dev/null +++ b/backports/uranium/qt-try-ints-then-bytes.patch @@ -0,0 +1,96 @@ +Patch-Source: https://src.fedoraproject.org/rpms/python-uranium/blob/rawhide/f/Uranium-5.3.0-qt-try-ints-then-bytes-for-gl-mask-functions.patch + +diff --git a/UM/View/RenderBatch.py.orig b/UM/View/RenderBatch.py +index 6deeeb1..5f1eda5 100644 +--- a/UM/View/RenderBatch.py.orig ++++ b/UM/View/RenderBatch.py +@@ -186,10 +186,24 @@ class RenderBatch: + + if self._render_type == self.RenderType.Solid: + self._gl.glEnable(self._gl.GL_DEPTH_TEST) +- self._gl.glDepthMask(self._gl.GL_TRUE) ++ try: ++ self._gl.glDepthMask(self._gl.GL_TRUE) ++ except: ++ Logger.log("w", "glDepthMask does not like ints, trying bytes...") ++ try: ++ self._gl.glDepthMask(b'1') ++ except: ++ Logger.log("e", "glDepthMask does not like ints or bytes, no idea what it wants") + elif self._render_type == self.RenderType.Transparent: + self._gl.glEnable(self._gl.GL_DEPTH_TEST) +- self._gl.glDepthMask(self._gl.GL_FALSE) ++ try: ++ self._gl.glDepthMask(self._gl.GL_FALSE) ++ except: ++ Logger.log("w", "glDepthMask does not like ints, trying bytes...") ++ try: ++ self._gl.glDepthMask(b'1') ++ except: ++ Logger.log("e", "glDepthMask does not like ints or bytes, no idea what it wants") + elif self._render_type == self.RenderType.Overlay: + self._gl.glDisable(self._gl.GL_DEPTH_TEST) + +diff --git a/UM/View/RenderPass.py.orig b/UM/View/RenderPass.py +index 8068ddf..8cb4f67 100644 +--- a/UM/View/RenderPass.py.orig ++++ b/UM/View/RenderPass.py +@@ -93,8 +93,22 @@ class RenderPass: + self._fbo.bind() + + # Ensure we can actually write to the relevant FBO components. +- self._gl.glColorMask(self._gl.GL_TRUE, self._gl.GL_TRUE,self._gl.GL_TRUE, self._gl.GL_TRUE) +- self._gl.glDepthMask(self._gl.GL_TRUE) ++ try: ++ self._gl.glColorMask(self._gl.GL_TRUE, self._gl.GL_TRUE,self._gl.GL_TRUE, self._gl.GL_TRUE) ++ except: ++ Logger.log("w", "glColorMask does not like ints, trying bytes...") ++ try: ++ self._gl.glColorMask(b'1', b'1',b'1', b'1') ++ except: ++ Logger.log("e", "glColorMask does not like ints or bytes, no idea what it wants") ++ try: ++ self._gl.glDepthMask(self._gl.GL_TRUE) ++ except: ++ Logger.log("w", "glDepthMask does not like ints, trying bytes...") ++ try: ++ self._gl.glDepthMask(b'1') ++ except: ++ Logger.log("e", "glDepthMask does not like ints or bytes, no idea what it wants") + + self._gl.glClear(self._gl.GL_COLOR_BUFFER_BIT | self._gl.GL_DEPTH_BUFFER_BIT) + +diff --git a/UM/View/SelectionPass.py.orig b/UM/View/SelectionPass.py +index ef042a5..c28fe4f 100644 +--- a/UM/View/SelectionPass.py.orig ++++ b/UM/View/SelectionPass.py +@@ -110,13 +110,27 @@ class SelectionPass(RenderPass): + if selectable_objects: + batch.render(self._scene.getActiveCamera()) + +- self._gl.glColorMask(self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_FALSE) ++ try: ++ self._gl.glColorMask(self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_FALSE) ++ except: ++ Logger.log("w", "glColorMask does not like ints, trying bytes...") ++ try: ++ self._gl.glColorMask(b'1', b'1', b'1', b'0') ++ except: ++ Logger.log("e", "glColorMask does not like ints or bytes, no idea what it wants") + self._gl.glDisable(self._gl.GL_DEPTH_TEST) + + tool_handle.render(self._scene.getActiveCamera()) + + self._gl.glEnable(self._gl.GL_DEPTH_TEST) +- self._gl.glColorMask(self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_TRUE) ++ try: ++ self._gl.glColorMask(self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_TRUE) ++ except: ++ Logger.log("w", "glColorMask does not like ints, trying bytes...") ++ try: ++ self._gl.glColorMask(b'1', b'1', b'1', b'1') ++ except: ++ Logger.log("e", "glColorMask does not like ints or bytes, no idea what it wants") + + self.release() + diff --git a/backports/yarn-berry/APKBUILD b/backports/yarn-berry/APKBUILD deleted file mode 100644 index 715d16c..0000000 --- a/backports/yarn-berry/APKBUILD +++ /dev/null @@ -1,33 +0,0 @@ -maintainer="Fabricio Silva " -pkgname=yarn-berry -pkgver=4.9.1 -pkgrel=0 -pkgdesc="Fast, reliable, and secure dependency management for Node.js - Active development version" -url="https://yarnpkg.com/" -license="BSD-2-Clause" -arch="noarch" -depends="!yarn nodejs" # not backward compatible with yarn classic (v1) -source="$pkgname-$pkgver.tgz::https://registry.npmjs.org/@yarnpkg/cli-dist/-/cli-dist-$pkgver.tgz" -builddir="$srcdir/package" -replaces="yarn" - -check() { - ./bin/yarn.js --version - ./bin/yarn.js --help -} - -package() { - local destdir="usr/share/node_modules/@yarnpkg/cli-dist" - - mkdir -p "$pkgdir"/$destdir/bin - install -Dm0644 package.json -t "$pkgdir"/$destdir - install -Dm0755 bin/yarn.js -t "$pkgdir"/$destdir/bin - - mkdir -p "$pkgdir"/usr/bin - ln -s ../share/node_modules/@yarnpkg/cli-dist/bin/yarn.js "$pkgdir"/usr/bin/yarn - ln -s yarn "$pkgdir"/usr/bin/yarnpkg -} - -sha512sums=" -cae0bcb10349af010b472ef7fa1023c33c0afd60a54dc29d18797e6bb771bd6c0d3d06aefa801c56363bcc6ecf6133988d1f943543293e7335ede60618fb28e8 yarn-berry-4.9.1.tgz -" diff --git a/unmaintained/craftbukkit-plugin-essentialsx/APKBUILD b/unmaintained/craftbukkit-plugin-essentialsx/APKBUILD new file mode 100644 index 0000000..9848a42 --- /dev/null +++ b/unmaintained/craftbukkit-plugin-essentialsx/APKBUILD @@ -0,0 +1,108 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=craftbukkit-plugin-essentialx +_pkgver=2.19.2 +_buildver=release +_buildcommit=0 +pkgrel=2 +pkgdesc="EssentialsX is the essential plugin suite for Minecraft servers, with over 130 commands for servers of all size and scale." +options=!check +arch='noarch' +url="https://essentialsx.net/" +license="GPL-3.0" +depends="craftbukkit>=1.8.8 craftbukkit<=1.18.1" + +if _buildver=release; then + pkgver=$_pkgver + _url=https://github.com/EssentialsX/Essentials/releases/download/$pkgver + _filename="$pkgver.jar" +else + pkgver=$_pkgver.$_buildver + _url=https://ci.ender.zone/job/EssentialsX/lastSuccessfulBuild/artifact/jars + _filename="$_pkgver-dev+$_buildver-$_buildcommit.jar" +fi + +source=" + $_url/EssentialsX-$_filename + $_url/EssentialsXChat-$_filename + $_url/EssentialsXSpawn-$_filename + $_url/EssentialsXAntiBuild-$_filename + $_url/EssentialsXDiscord-$_filename + $_url/EssentialsXGeoIP-$_filename + $_url/EssentialsXProtect-$_filename + $_url/EssentialsXXMPP-$_filename +" + +subpackages="$pkgname-core $pkgname-chat $pkgname-spawn $pkgname-antibuild $pkgname-discord $pkgname-geo $pkgname-protect $pkgname-xmpp" + + +package() { + mkdir -p "$pkgdir" +} + +core() { + pkgdesc="Core functionality: teleports, private messages, homes, warps and more" + install -Dm644 "$srcdir"/EssentialsX-*.jar "$subpkgdir/var/lib/craftbukkit/plugins/Essentials.jar" + chown craftbukkit:craftbukkit "$subpkgdir"/var/lib/craftbukkit/plugins/Essentials.jar +} + +chat() { + pkgdesc="Chat formatting, local chat" + depends="$pkgname-core" + install -Dm644 "$srcdir"/EssentialsXChat-*.jar "$subpkgdir/var/lib/craftbukkit/plugins/EssentialsChat.jar" + chown craftbukkit:craftbukkit "$subpkgdir"/var/lib/craftbukkit/plugins/EssentialsChat.jar +} + +spawn() { + pkgdesc="Spawnpoint control, per-player spawns" + depends="$pkgname-core" + install -Dm644 "$srcdir"/EssentialsXSpawn-*.jar "$subpkgdir/var/lib/craftbukkit/plugins/EssentialsSpawn.jar" + chown craftbukkit:craftbukkit "$subpkgdir"/var/lib/craftbukkit/plugins/EssentialsSpawn.jar +} + +antibuild() { + pkgdesc="Simple permissions-based building control" + depends="$pkgname-core" + install -Dm644 "$srcdir"/EssentialsXAntiBuild-*.jar "$subpkgdir/var/lib/craftbukkit/plugins/EssentialsAntiBuild.jar" + chown craftbukkit:craftbukkit "$subpkgdir"/var/lib/craftbukkit/plugins/EssentialsAntiBuild.jar +} + +discord() { + pkgdesc="Lightweight chat, messaging and command integration with Discord" + depends="$pkgname-core" + install -Dm644 "$srcdir"/EssentialsXDiscord-*.jar "$subpkgdir/var/lib/craftbukkit/plugins/EssentialsDiscord.jar" + chown craftbukkit:craftbukkit "$subpkgdir"/var/lib/craftbukkit/plugins/EssentialsDiscord.jar +} + +geo() { + pkgdesc="Geographical player lookup (formerly EssentialsX GeoIP)" + depends="$pkgname-core" + install -Dm644 "$srcdir"/EssentialsXGeoIP-*.jar "$subpkgdir/var/lib/craftbukkit/plugins/EssentialsGeo.jar" + chown craftbukkit:craftbukkit "$subpkgdir"/var/lib/craftbukkit/plugins/EssentialsGeo.jar +} + +protect() { + pkgdesc="Configurable world protection and control" + depends="$pkgname-core" + install -Dm644 "$srcdir"/EssentialsXProtect-*.jar "$subpkgdir/var/lib/craftbukkit/plugins/EssentialsProtect.jar" + chown craftbukkit:craftbukkit "$subpkgdir"/var/lib/craftbukkit/plugins/EssentialsProtect.jar +} + +xmpp() { + pkgdesc="Lightweight chat, messaging and server log integration with Jabber/XMPP services" + depends="$pkgname-core" + install -Dm644 "$srcdir"/EssentialsXXMPP-*.jar "$subpkgdir/var/lib/craftbukkit/plugins/EssentialsXMPP.jar" + chown craftbukkit:craftbukkit "$subpkgdir"/var/lib/craftbukkit/plugins/EssentialsXMPP.jar +} + +sha512sums=" +c91c0905c11482d93b1565f8b9dce7b6f939567b4cb2756b112ee408bdcca1fece04742f9b7b0876d5b2e84cebdbc555d35cf783e9e86ab12fafb9dc02bc6008 EssentialsX-2.19.2.jar +e2df6f242db38689579501b34763ad7d4b5e8ddd87b7b57956c6b5cc667f1b34af6b1289d668a64761da63f8ae8507eb9687ca490cc715a3eff6338770963240 EssentialsXChat-2.19.2.jar +24e41168428f20bd6506282b9920718c43f7e5227bf35e174522e49859e294048a1d979ae42044bdbdba45c8a1109f4db6ffd0e24d5f3e909d0f9a3ac31e21d3 EssentialsXSpawn-2.19.2.jar +326ec004241b526965cb67ae0f0245dfa960da2fdb4b59d867eb08e5196fceb468f9314cb838c8a0bc513cc55f43cf58023d11b18ed98e472be7089838538f97 EssentialsXAntiBuild-2.19.2.jar +211c575adde17c3f2f901144e5c31beb2918df7e6e15f8ebe16805d3b53214a4756b87ec84466790ebf1dacb41e1aea97b6a9ba8ed39e85092293a821044d579 EssentialsXDiscord-2.19.2.jar +7845e7666f983d3e793528a7085ced7c9f1bf881740bcc68b6a54fea74e31c3c0c2a52e26fc20330ba7d4a190dad0a1b27195fed0e1417a48494c5fa2ac60d92 EssentialsXGeoIP-2.19.2.jar +e74ed72a15b5e6cd3c5f61d032a26c151865e3197638c9059237dc2d1144b0cb15668545532fc532ac8ec247bdf9b9ee6843b8f4af7506aef86d155dd5672c5f EssentialsXProtect-2.19.2.jar +8d35009499557700f49c27ca3132e866f511a200791dbcfd2f595396977058cc2fc9349d0b4eaa0eb67b27331e91e6209df6ed57a766c06fd3b3325718462478 EssentialsXXMPP-2.19.2.jar +" diff --git a/unmaintained/craftbukkit-plugin-luckperms/APKBUILD b/unmaintained/craftbukkit-plugin-luckperms/APKBUILD new file mode 100644 index 0000000..1ef75e9 --- /dev/null +++ b/unmaintained/craftbukkit-plugin-luckperms/APKBUILD @@ -0,0 +1,23 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=craftbukkit-plugin-luckperms +_pkgver=5.3.89 +_buildver=1389 +pkgver=$_pkgver.$_buildver +pkgrel=1 +pkgdesc="An advanced permissions plugin for Bukkit/Spigot, BungeeCord and Sponge." +options=!check +arch='noarch' +url="https://github.com/lucko/LuckPerms" +license="MIT" +depends="craftbukkit>=1.8.8 craftbukkit<=1.18.1" +source="https://ci.lucko.me/job/LuckPerms/$_buildver/artifact/bukkit/loader/build/libs/LuckPerms-Bukkit-$_pkgver.jar" + +package() { + install -Dm644 "$srcdir"/LuckPerms-Bukkit-$_pkgver.jar "$pkgdir/var/lib/craftbukkit/plugins/LuckPerms.jar" + chown craftbukkit:craftbukkit "$pkgdir"/var/lib/craftbukkit/plugins/LuckPerms.jar +} +sha512sums=" +7e146616cdf7f667c483bbe2112439c85f32427e9aa3714f0b0e869abf0cde6aacc7341d8d9e6a72ddcf8f35af840f4ba678c4690222912113f497cafce11154 LuckPerms-Bukkit-5.3.89.jar +" diff --git a/unmaintained/craftbukkit-plugin-worldedit/APKBUILD b/unmaintained/craftbukkit-plugin-worldedit/APKBUILD new file mode 100644 index 0000000..6ee40e2 --- /dev/null +++ b/unmaintained/craftbukkit-plugin-worldedit/APKBUILD @@ -0,0 +1,22 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=craftbukkit-plugin-worldedit +pkgver=7.2.8 +_pkgver=$pkgver +pkgrel=1 +pkgdesc="WorldEdit is an easy-to-use in-game Minecraft map editor" +options=!check +arch='noarch' +url="https://dev.bukkit.org/projects/worldedit" +license="GPL-3.0" +depends="craftbukkit>=1.13.2 craftbukkit<=1.18.1" +source="https://media.forgecdn.net/files/3559/523/worldedit-bukkit-7.2.8.jar" + +package() { + install -Dm644 "$srcdir"/worldedit-bukkit-$_pkgver.jar "$pkgdir/var/lib/craftbukkit/plugins/WorldEdit.jar" + chown craftbukkit:craftbukkit $pkgdir/var/lib/craftbukkit/plugins/WorldEdit.jar +} +sha512sums=" +b57eacf7a2d90461f996f71cf55aa2e328d7b75c724291f11bcd1ab0f7e64e980db7ae3a2a56fffdf2bc31bfbcf68dda89b7c6f2ffa32ee430b8016020d796e3 worldedit-bukkit-7.2.8.jar +" diff --git a/unmaintained/craftbukkit-plugin-worldguard/APKBUILD b/unmaintained/craftbukkit-plugin-worldguard/APKBUILD new file mode 100644 index 0000000..478480b --- /dev/null +++ b/unmaintained/craftbukkit-plugin-worldguard/APKBUILD @@ -0,0 +1,22 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=craftbukkit-plugin-worldedit +pkgver=7.0.6 +_pkgver=$pkgver +pkgrel=3 +pkgdesc="WorldGuard lets you and players guard areas of land against griefers and undesirables" +options=!check +arch='noarch' +url="https://dev.bukkit.org/projects/worldguard" +license="GPL-3.0" +depends="craftbukkit>=1.17.0 craftbukkit<=1.18.1" +source="https://media.forgecdn.net/files/3461/546/worldguard-bukkit-7.0.6-dist.jar" + +package() { + install -Dm644 "$srcdir"/worldguard-bukkit-$_pkgver-dist.jar "$pkgdir/var/lib/craftbukkit/plugins/WorldGuard.jar" + chown craftbukkit:craftbukkit $pkgdir/var/lib/craftbukkit/plugins/WorldGuard.jar +} +sha512sums=" +f2f857ffbbe7896b8986d5944564d7ab01e51d86476e05c66067a57d83dcb2ee60019ab9d75b16d551e9cfe102d29a602de41f316da57d7743d2595d6a11d839 worldguard-bukkit-7.0.6-dist.jar +" diff --git a/unmaintained/mathjax2/APKBUILD b/unmaintained/mathjax2/APKBUILD index ceb2b15..3075ca1 100644 --- a/unmaintained/mathjax2/APKBUILD +++ b/unmaintained/mathjax2/APKBUILD @@ -1,38 +1,35 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) +# $Id: PKGBUILD 362427 2018-07-19 17:42:59Z arojas $ +# Maintainer: Antonio Rojas +# Contributor: Kevin Dodd +# Contributor: Tianjiao Yin pkgname=mathjax2 pkgver=2.7.9 -pkgrel=1 -pkgdesc="An open source JavaScript display engine for mathematics that works in all modern browsers" -url="https://www.mathjax.org/" +pkgrel=0 +pkgdesc='An open source JavaScript display engine for mathematics that works in all modern browsers' +url='https://www.mathjax.org/' arch=noarch -license="Apache-2.0" +license=Apache source="$pkgname-$pkgver.tar.gz::https://github.com/mathjax/MathJax/archive/$pkgver.tar.gz" -builddir="$srcdir"/MathJax-$pkgver -options="!check" # No testsuite +options=!check -build() { - # Remove unneeded stuff, see https://github.com/mathjax/MathJax-docs/wiki/Guide%3A-reducing-size-of-a-mathjax-installation - for i in docs test unpacked fonts/HTML-CSS/TeX/png; do - rm -r $i - done - for _format in eot otf svg ; do - find . -type d -name "$_format" -prune -exec rm -rf {} \; - done +prepare() { + cd $srcdir/MathJax-$pkgver + +# Remove unneeded stuff, see https://github.com/mathjax/MathJax-docs/wiki/Guide%3A-reducing-size-of-a-mathjax-installation + rm -r docs test unpacked + rm -r fonts/HTML-CSS/TeX/png + for _format in eot otf svg ; do + find . -type d -name "$_format" -prune -exec rm -rf {} \; + done } package() { - mkdir -p \ - "$pkgdir"/usr/share/fonts \ - "$pkgdir"/usr/share/licenses/mathjax2 - - cp -a "$builddir" "$pkgdir"/usr/share/mathjax2 - - mv "$pkgdir"/usr/share/mathjax2/fonts "$pkgdir"/usr/share/fonts/mathjax2 - ln -s /usr/share/fonts/mathjax2 "$pkgdir"/usr/share/mathjax2/fonts - mv "$pkgdir"/usr/share/mathjax2/LICENSE "$pkgdir"/usr/share/licenses/mathjax2/ + cd ${srcdir} + mkdir -p "$pkgdir"/usr/share/fonts "$pkgdir"/usr/share/licenses/mathjax2 + cp -a MathJax-$pkgver "$pkgdir"/usr/share/mathjax2 + mv "$pkgdir"/usr/share/mathjax2/fonts "$pkgdir"/usr/share/fonts/mathjax2 + ln -s /usr/share/fonts/mathjax2 "$pkgdir"/usr/share/mathjax2/fonts + mv "$pkgdir"/usr/share/mathjax2/LICENSE "$pkgdir"/usr/share/licenses/mathjax2/ } -sha512sums=" -ac7b2dfc6064148e941e5ee05361467514e5f28449dbb697ff1df556968ccb71f501c4021ade285cbbb995983513669c14d9c06886a7b83a5c75fa30504fa8ab mathjax2-2.7.9.tar.gz -" +sha512sums="ac7b2dfc6064148e941e5ee05361467514e5f28449dbb697ff1df556968ccb71f501c4021ade285cbbb995983513669c14d9c06886a7b83a5c75fa30504fa8ab mathjax2-2.7.9.tar.gz" diff --git a/unmaintained/papermc/APKBUILD b/unmaintained/papermc/APKBUILD new file mode 100644 index 0000000..e400914 --- /dev/null +++ b/unmaintained/papermc/APKBUILD @@ -0,0 +1,56 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=papermc +_pkgver=1.18.1 +_build=99 +_license_commit=4a7962c +pkgver="$_pkgver.$_build" +pkgrel=1 +pkgdesc="Next generation of Minecraft server, compatible with Spigot plugins and offering uncompromising performance" +pkgusers="craftbukkit" +pkggroups="craftbukkit" +arch='noarch' +url="https://papermc.io/" +license='custom' +depends='openjdk17-jre-headless screen sudo bash gawk sed netcat-openbsd tar' +options="!check" +provides="craftbukkit=$_pkgver" +subpackages="$pkgname-openrc" +source="papermc.$pkgver.jar::https://papermc.io/api/v2/projects/paper/versions/$_pkgver/builds/$_build/downloads/paper-$_pkgver-$_build.jar + papermc.initd + papermc.conf + papermc.sh + LICENSE_$pkgver.md::https://raw.githubusercontent.com/PaperMC/Paper/$_license_commit/LICENSE.md +" + +_game="papermc" +_server_root="/var/lib/papermc" + +package() { + install -Dm644 "$srcdir"/$_game.conf "$pkgdir"/etc/conf.d/$_game + install -Dm755 "$srcdir"/$_game.sh "$pkgdir"/usr/bin/$_game + install -Dm755 "$srcdir"/$_game.initd "$pkgdir"/etc/init.d/$_game + install -Dm644 "$srcdir"/$_game.$pkgver.jar "$pkgdir"/$_server_root/$_game/$pkgver.jar + ln -s "$_game"/$pkgver.jar "$pkgdir"/$_server_root/$_game/server.jar + + # Link to craftbukkit plugins var + ln -s "/var/lib/craftbukkit/plugins" "$pkgdir"/$_server_root/plugins + + # Link the log files + mkdir -p "$pkgdir"/var/log/ + install -dm2755 "$pkgdir"/$_server_root/logs + ln -s "$_server_root"/logs "$pkgdir"/var/log/$_game + + # Give the group write permissions and set user or group ID on execution + chmod g+ws "$pkgdir"/$_server_root + + install -D "$srcdir"/LICENSE_$pkgver.md "$pkgdir"/usr/share/licenses/$pkgname/LICENSE +} +sha512sums=" +623d6423ee337671d546469e6bf1821005484192a1ae56d7b77f547f79102df50462e1d0144be13a0de9021c9d931bc974143b1e1526114627ba28688589d76a papermc.1.18.1.99.jar +c5d1bf85ceb74162aaaf2bcd2d06dc2e3dd2e37c39f0cee2be7c8dbff9970a6aff1e48a43e6d1e83e6a0ac610bd89f62b1279bf27b64afa88d9831a36aebbd3e papermc.initd +9b8e267428731ee9255f82a93f1e8674d7e917a0f154bd395cd2280a49aa248a4b8427520b08dbb4b3a74a5471dac0e439eedc8ab94bf2e53bb8d411d2d8a789 papermc.conf +943ba0d4c10173246bdc6497dcedd54da0788f966841c8d3381398711d79f8d5eb07a24ce28f519b6f24f59d99fa9e74bc6bb882059f343df4eeda5de3660ac7 papermc.sh +d4c645a58e1a17a0a1e42856a3cc43097711a05bf3d9f18c77c3bc9874417f223552859042ff00b7d3dda0003f49a9ee568540c2eb24e9f8fbb3c055f3b6e0a5 LICENSE_1.18.1.99.md +" diff --git a/unmaintained/papermc/APKBUILD.orig b/unmaintained/papermc/APKBUILD.orig new file mode 100644 index 0000000..fe78218 --- /dev/null +++ b/unmaintained/papermc/APKBUILD.orig @@ -0,0 +1,56 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=papermc +_pkgver=1.18.1 +_build=99 +_license_commit=4a7962c +pkgver="$_pkgver.$_build" +pkgrel=1 +pkgdesc="Next generation of Minecraft server, compatible with Spigot plugins and offering uncompromising performance" +pkgusers="craftbukkit" +pkggroups="craftbukkit" +arch='noarch' +url="https://papermc.io/" +license='custom' +depends='openjdk17-jre-headless screen sudo bash gawk sed netcat-openbsd tar' +options="!check" +provides="craftbukkit=$_pkgver" +subpackages="$pkgname.openrc" +source="papermc.$pkgver.jar::https://papermc.io/api/v2/projects/paper/versions/$_pkgver/builds/$_build/downloads/paper-$_pkgver-$_build.jar + papermc.initd + papermc.conf + papermc.sh + LICENSE_$pkgver.md::https://raw.githubusercontent.com/PaperMC/Paper/$_license_commit/LICENSE.md +" + +_game="papermc" +_server_root="/var/lib/papermc" + +package() { + install -Dm644 $srcdir.$_game.conf "$pkgdir.etc/conf.d/$_game" + install -Dm755 $srcdir.$_game.sh "$pkgdir.usr/bin/$_game" + install -Dm755 $srcdir.$_game.initd "$pkgdir.etc/init.d/$_game" + install -Dm644 $srcdir.$_game.$pkgver.jar "$pkgdir.$_server_root.$_game.$pkgver.jar" + ln -s "$_game.$pkgver.jar" "$pkgdir._server_root.$_game.server.jar" + + # Link to craftbukkit plugins var + ln -s "/var/lib/craftbukkit/plugins" "$pkgdir.$_server_root.plugins" + + # Link the log files + mkdir -p "$pkgdir.var/log/" + install -dm2755 "$pkgdir.$_server_root.logs" + ln -s "$_server_root.logs" "$pkgdir.var/log/$_game" + + # Give the group write permissions and set user or group ID on execution + chmod g+ws "$pkgdir._server_root" + + install -D $srcdir../LICENSE_$pkgver.md "$pkgdir.usr/share/licenses/$pkgname.LICENSE" +} +sha512sums=" +623d6423ee337671d546469e6bf1821005484192a1ae56d7b77f547f79102df50462e1d0144be13a0de9021c9d931bc974143b1e1526114627ba28688589d76a papermc.1.18.1.99.jar +c5d1bf85ceb74162aaaf2bcd2d06dc2e3dd2e37c39f0cee2be7c8dbff9970a6aff1e48a43e6d1e83e6a0ac610bd89f62b1279bf27b64afa88d9831a36aebbd3e papermc.initd +9b8e267428731ee9255f82a93f1e8674d7e917a0f154bd395cd2280a49aa248a4b8427520b08dbb4b3a74a5471dac0e439eedc8ab94bf2e53bb8d411d2d8a789 papermc.conf +943ba0d4c10173246bdc6497dcedd54da0788f966841c8d3381398711d79f8d5eb07a24ce28f519b6f24f59d99fa9e74bc6bb882059f343df4eeda5de3660ac7 papermc.sh +d4c645a58e1a17a0a1e42856a3cc43097711a05bf3d9f18c77c3bc9874417f223552859042ff00b7d3dda0003f49a9ee568540c2eb24e9f8fbb3c055f3b6e0a5 LICENSE_1.18.1.99.md +" diff --git a/unmaintained/papermc/APKBUILD.rej b/unmaintained/papermc/APKBUILD.rej new file mode 100644 index 0000000..f8c4908 --- /dev/null +++ b/unmaintained/papermc/APKBUILD.rej @@ -0,0 +1,38 @@ +--- user/papermc/APKBUILD ++++ user/papermc/APKBUILD +@@ -28,24 +28,24 @@ _game="papermc" + _server_root="/var/lib/papermc" + + package() { +- install -Dm644 $srcdir.$_game.conf "$pkgdir.etc/conf.d/$_game" +- install -Dm755 $srcdir.$_game.sh "$pkgdir.usr/bin/$_game" +- install -Dm755 $srcdir.$_game.initd "$pkgdir.etc/init.d/$_game" +- install -Dm644 $srcdir.$_game.$pkgver.jar "$pkgdir.$_server_root.$_game.$pkgver.jar" +- ln -s "$_game.$pkgver.jar" "$pkgdir._server_root.$_game.server.jar" ++ install -Dm644 "$srcdir"/$_game.conf "$pkgdir"/etc/conf.d/$_game ++ install -Dm755 "$srcdir"/$_game.sh "$pkgdir"/usr/bin/$_game ++ install -Dm755 "$srcdir"/$_game.initd "$pkgdir"/etc/init.d/$_game ++ install -Dm644 "$srcdir"/$_game.$pkgver.jar "$pkgdir"/$_server_root/$_game/$pkgver.jar ++ ln -s "$_game"/$pkgver.jar "$pkgdir"/$_server_root/$_game/server.jar + + # Link to craftbukkit plugins var +- ln -s "/var/lib/craftbukkit/plugins" "$pkgdir.$_server_root.plugins" ++ ln -s "/var/lib/craftbukkit/plugins" "$pkgdir"/$_server_root/plugins + + # Link the log files +- mkdir -p "$pkgdir.var/log/" +- install -dm2755 "$pkgdir.$_server_root.logs" +- ln -s "$_server_root.logs" "$pkgdir.var/log/$_game" ++ mkdir -p "$pkgdir"/var/log/ ++ install -dm2755 "$pkgdir"/$_server_root/logs ++ ln -s "$_server_root"/logs "$pkgdir"/var/log/$_game + + # Give the group write permissions and set user or group ID on execution +- chmod g+ws "$pkgdir._server_root" ++ chmod g+ws "$pkgdir"/$_server_root + +- install -D $srcdir../LICENSE_$pkgver.md "$pkgdir.usr/share/licenses/$pkgname.LICENSE" ++ install -D "$srcdir"/LICENSE_$pkgver.md "$pkgdir"/usr/share/licenses/$pkgname/LICENSE + } + sha512sums=" + 623d6423ee337671d546469e6bf1821005484192a1ae56d7b77f547f79102df50462e1d0144be13a0de9021c9d931bc974143b1e1526114627ba28688589d76a papermc.1.18.1.99.jar diff --git a/user/papermc/papermc.conf b/unmaintained/papermc/papermc.conf similarity index 100% rename from user/papermc/papermc.conf rename to unmaintained/papermc/papermc.conf diff --git a/user/papermc/papermc.initd b/unmaintained/papermc/papermc.initd similarity index 100% rename from user/papermc/papermc.initd rename to unmaintained/papermc/papermc.initd diff --git a/user/papermc/papermc.post-install b/unmaintained/papermc/papermc.post-install similarity index 100% rename from user/papermc/papermc.post-install rename to unmaintained/papermc/papermc.post-install diff --git a/user/papermc/papermc.service b/unmaintained/papermc/papermc.service similarity index 100% rename from user/papermc/papermc.service rename to unmaintained/papermc/papermc.service diff --git a/user/papermc/papermc.sh b/unmaintained/papermc/papermc.sh similarity index 100% rename from user/papermc/papermc.sh rename to unmaintained/papermc/papermc.sh diff --git a/unmaintained/py3-html5-parser/APKBUILD b/unmaintained/py3-html5-parser/APKBUILD new file mode 100644 index 0000000..160a9ee --- /dev/null +++ b/unmaintained/py3-html5-parser/APKBUILD @@ -0,0 +1,33 @@ +# Maintainer: Antoine Martin + +_pkgname="html5-parser" +pkgname='py3-html5-parser' +pkgver=0.4.9 +pkgrel=0 +pkgdesc="Fast C based HTML 5 parsing for python" +arch='x86_64' +url="https://github.com/kovidgoyal/${_pkgname}" +license='Apache' +checkdepends='py3-beautifulsoup4' +makedepends='py3-chardet py3-lxml py3-setuptools libxml2-dev python3-dev' +source="${pkgname}-${pkgver}.tar.gz::${url}/archive/v${pkgver}.tar.gz" + +build() { + cd "${srcdir}"/${_pkgname}-${pkgver} + + python3 setup.py build +} + +check() { + cd "${srcdir}"/${_pkgname}-${pkgver} + + python3 setup.py test +} + +package() { + cd "${srcdir}"/${_pkgname}-${pkgver} + python3 setup.py install --root="${pkgdir}" --optimize=1 --skip-build +} + + +sha512sums="31d0499e690c1cfe86fcaabddf4a5842b504706f6d95268dfad4ce80a8b91df6ba779c27dd4fe877232f6664142ed04b9d2af0aff601aa1855f91d9720adf512 py3-html5-parser-0.4.9.tar.gz" diff --git a/user/calibre-web/APKBUILD b/user/calibre-web/APKBUILD index 37f5ea0..df1b79a 100644 --- a/user/calibre-web/APKBUILD +++ b/user/calibre-web/APKBUILD @@ -1,8 +1,8 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=calibre-web -pkgver=0.6.25 -pkgrel=0 +pkgver=0.6.21 +pkgrel=1 pkgdesc="Web app for browsing, reading and downloading eBooks stored in a Calibre database" arch='noarch' url="https://github.com/janeczku/calibre-web" @@ -10,27 +10,26 @@ license='GPL-3.0-only' depends=" py3-apscheduler py3-babel - py3-bleach + py3-backports_abc + py3-blinker py3-chardet - py3-cryptography py3-flask-babel + py3-flask-login py3-flask-limiter py3-flask-principal py3-flask-wtf - py3-flask-httpauth + py3-goodreads + py3-levenshtein + py3-iso639 py3-lxml - py3-magic - py3-netifaces - py3-pypdf - py3-pycountry - py3-regex + py3-pypdf2 py3-requests py3-sqlalchemy py3-tornado py3-tz py3-unidecode - py3-urllib3 py3-wand + py3-werkzeug " source=" $pkgname-$pkgver.tar.gz::https://github.com/janeczku/calibre-web/archive/$pkgver.tar.gz @@ -57,7 +56,7 @@ package() { install -D -m 644 "$srcdir"/calibre-web.conf "$pkgdir"/etc/conf.d/calibre-web } sha512sums=" -878d057613b7f89e57ad536c415bb4dc346d5f8c4ca2660517b68c70c4eefa5358317fe0e917738d468cb003358a0341411155289d952b1aa6cd4a022a84c8f0 calibre-web-0.6.25.tar.gz +d2f07eec0b6c9f65e68ae0b72fddd14444eb8be8b0fee997ec7caaa1feebb8a26603844752347547becde501669af5bce69e9eab466a28fd4b10624b65c9afcf calibre-web-0.6.21.tar.gz 4aba825eb12f44eb0912cc6981b46bec9b77ad114627564c9c7585862a099c7d1ff8deec5f15d047319805e2b9a3e2d128b2d1292dd92293a7e72359009a480f calibre-web.conf 62859a8a304216dc0dbfb7f2e8144a50d348c6621f5b292c08aa97a872ada67b52d36b567546fd0f4c439dbefe0bbe0e4fb1e1affbe507278b4a8d36ed3fa2a9 calibre-web.initd " diff --git a/backports/caprine/APKBUILD b/user/caprine/APKBUILD similarity index 58% rename from backports/caprine/APKBUILD rename to user/caprine/APKBUILD index f8f2b6d..73c3e02 100644 --- a/backports/caprine/APKBUILD +++ b/user/caprine/APKBUILD @@ -1,30 +1,33 @@ -# Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + pkgname=caprine -pkgver=2.60.3 -pkgrel=6 +pkgver=2.59.1 +pkgrel=0 pkgdesc="Elegant Facebook Messenger desktop app" -arch="x86_64 aarch64" # blocked by electron +arch="x86_64 aarch64" # bloced by electron url="https://github.com/sindresorhus/caprine" license="MIT" depends="electron" makedepends="npm findutils coreutils" -options="!check" # No test suite +options="!check" source=" $pkgname-$pkgver.tar.gz::https://github.com/sindresorhus/caprine/archive/refs/tags/v$pkgver.tar.gz caprine.desktop - caprine.sh + caprine.js " build() { - npm ci --ignore-scripts - npx patch-package + npm install --ignore-scripts + npx --yes patch-package npx tsc - npm prune --ignore-scripts --omit=dev + rm -r node_modules + npm install --ignore-scripts --production + npx --yes patch-package } package() { - local appdir=/usr/lib/caprine + local appdir=/usr/lib/$pkgname install -d "$pkgdir"$appdir cp -r ./* "$pkgdir"$appdir @@ -32,13 +35,13 @@ package() { install -dm755 "$pkgdir/usr/share/pixmaps" install -m644 build/icon.png "$pkgdir/usr/share/pixmaps/$pkgname.png" - install -Dm755 "$srcdir"/caprine.sh "$pkgdir"/usr/bin/caprine - install -Dm644 "$srcdir"/caprine.desktop \ - "$pkgdir"/usr/share/applications/caprine.desktop + install -Dm755 "$srcdir"/$pkgname.js "$pkgdir"/usr/bin/$pkgname + install -Dm644 "$srcdir"/$pkgname.desktop \ + "$pkgdir"/usr/share/applications/$pkgname.desktop - install -dm755 "$pkgdir"/usr/share/licenses/caprine - ln -s "$(realpath -m --relative-to=/usr/share/licenses/caprine $appdir/license)" \ - "$pkgdir"/usr/share/licenses/caprine + install -dm755 "$pkgdir"/usr/share/licenses/$pkgname + ln -s "$(realpath -m --relative-to=/usr/share/licenses/$pkgname $appdir/license)" \ + "$pkgdir"/usr/share/licenses/$pkgname # Clean up rm -r "$pkgdir"$appdir/build @@ -46,7 +49,7 @@ package() { rm -r "$pkgdir"$appdir/tsconfig.json find "$pkgdir"$appdir \ -name "package.json" \ - -exec sed -e "s|$srcdir/caprine|$appdir|" \ + -exec sed -e "s|$srcdir/$pkgname|$appdir|" \ -i {} \; \ -or -name ".*" -prune -exec rm -r '{}' \; \ -or -name "bin" -prune -exec rm -r '{}' \; \ @@ -57,7 +60,7 @@ package() { -or -name "test" -prune -exec rm -r '{}' \; } sha512sums=" -edf6452294b3c661befd9811c5836da33311171d587cb9a5939ac11a0c1e2a7ebbc4f2a8d81e02c1db1a2d814ac1aa7bbdadca9e21892cc8d7f7e9c23dc2e221 caprine-2.60.3.tar.gz +a525bafb6a53dd2dbdfc4b9b3e96d3939d93be950a3287f2a5ef6465d5a6b64ecda79b6d393023d067f939e1a6e85debc35f83bbb1f758011db9d94dd9ff8a72 caprine-2.59.1.tar.gz a469e3bea24926119e51642b777ef794c5fa65421107903f967c36d81bbb1adb3d52469ce3a3301b2c890f1aa53ab989ded22a7c6e811fb8cf0a582dbd835e19 caprine.desktop -3ad8994c1a0417e73d622587769e527b4236a32c1a89442ff76413b75b4392d667c9e2908979b453e5926e54db6d94b31625340c5a94e84e91ea77f56feae778 caprine.sh +44280c62ce43bdafa8528729371fccb16b8a0e3db7aca28d5c157ae0144dca5fbb023b8883b561955aa28ab62e967f2674d8c6bcaff186e2cdd0e7ba8beab9ac caprine.js " diff --git a/backports/caprine/caprine.desktop b/user/caprine/caprine.desktop similarity index 100% rename from backports/caprine/caprine.desktop rename to user/caprine/caprine.desktop diff --git a/user/caprine/caprine.js b/user/caprine/caprine.js new file mode 100644 index 0000000..a963ee6 --- /dev/null +++ b/user/caprine/caprine.js @@ -0,0 +1,29 @@ +#!/usr/bin/electron + +const name = 'caprine'; + +const {app} = require('electron'); +const fs = require('fs'); +const path = require('path'); + +// Change command name. +const fd = fs.openSync('/proc/self/comm', fs.constants.O_WRONLY); +fs.writeSync(fd, name); +fs.closeSync(fd); + +// Remove first command line argument (/usr/bin/electron). +process.argv.splice(0, 1); + +// Set application paths. +const appPath = path.join(path.dirname(__dirname), 'lib', name); +const packageJson = require(path.join(appPath, 'package.json')); +const productName = packageJson.productName; +app.setAppPath(appPath); +app.setDesktopName(name + '.desktop'); +app.setName(productName); +app.setPath('userCache', path.join(app.getPath('cache'), productName)); +app.setPath('userData', path.join(app.getPath('appData'), productName)); +app.setVersion(packageJson.version); + +// Run the application. +require('module')._load(appPath, module, true); diff --git a/user/codeberg-pages-server/APKBUILD b/user/codeberg-pages-server/APKBUILD new file mode 100644 index 0000000..5eab680 --- /dev/null +++ b/user/codeberg-pages-server/APKBUILD @@ -0,0 +1,45 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=codeberg-pages-server +pkgver=5.1 +pkgrel=0 +pkgdesc="The Codeberg Pages Server – with custom domain support, per-repo pages using the "pages" branch, caching and more." +url="https://codeberg.org/Codeberg/pages-server" +arch="all" +license="EUPL-1.2" +depends="nginx" +makedepends="go just" +# tests disabled for now +options="!check" +install="$pkgname.post-install $pkgname.post-upgrade $pkgname.pre-install" +source=" + $pkgname-$pkgver.tar.gz::https://codeberg.org/Codeberg/pages-server/archive/v$pkgver.tar.gz + codeberg-pages-server.openrc + upgrade-go-sqlite3-to-1.14.19.patch + " +builddir="$srcdir/"pages-server +subpackages="$pkgname-openrc" +pkgusers="git" +pkggroups="www-data" + +export GOPATH=$srcdir/go +export GOCACHE=$srcdir/go-build +export GOTMPDIR=$srcdir + +build() { + just build +} + +package() { + msg "Packaging $pkgname" + install -Dm755 "$builddir"/build/codeberg-pages-server "$pkgdir"/usr/bin/codeberg-pages-server + + install -Dm755 "$srcdir"/$pkgname.openrc \ + "$pkgdir"/etc/init.d/$pkgname +} + +sha512sums=" +55a1dd5ed0f1cb2aaad1066eca8bfbd1d537169ed3712c748163ebff64edc45d05ac1f6f062433e232e2638a790232438282f96dd7410eb4cbaff7208f5f2427 codeberg-pages-server-5.1.tar.gz +4defb4fe3a4230f4aa517fbecd5e5b8bcef2a64e1b40615660ae9eec33597310a09df5e126f4d39ce7764bd1716c0a7040637699135c103cbc1879593c6c06f1 codeberg-pages-server.openrc +895f1c8d22fcf1d5491a6fe0ce5d93201f83b6dd5fc81b24016b609988fb6c66fdde75bb3830f385a5c83d96366ca3a5f4f9524f52058b6c5dfd8b80d14bac5b upgrade-go-sqlite3-to-1.14.19.patch +" diff --git a/user/codeberg-pages-server/codeberg-pages-server.openrc b/user/codeberg-pages-server/codeberg-pages-server.openrc new file mode 100644 index 0000000..a036393 --- /dev/null +++ b/user/codeberg-pages-server/codeberg-pages-server.openrc @@ -0,0 +1,30 @@ +#!/sbin/openrc-run + +name="$RC_SVCNAME" +cfgfile="/etc/conf.d/$RC_SVCNAME.conf" +pidfile="/run/$RC_SVCNAME.pid" +working_directory="/usr/share/webapps/authentik" +command="/usr/share/webapps/authentik/server" +command_user="authentik" +command_group="authentik" +start_stop_daemon_args="" +command_background="yes" +output_log="/var/log/authentik/$RC_SVCNAME.log" +error_log="/var/log/authentik/$RC_SVCNAME.err" + +depend() { + need redis + need postgresql +} + +start_pre() { + cd "$working_directory" + checkpath --directory --owner $command_user:$command_group --mode 0775 \ + /var/log/authentik \ + /var/lib/authentik/certs +} + +stop_pre() { + ebegin "Killing child processes" + kill $(ps -o pid= --ppid $(cat $pidfile)) || true +} diff --git a/user/codeberg-pages-server/codeberg-pages-server.post-install b/user/codeberg-pages-server/codeberg-pages-server.post-install new file mode 100755 index 0000000..a715d20 --- /dev/null +++ b/user/codeberg-pages-server/codeberg-pages-server.post-install @@ -0,0 +1,39 @@ +#!/bin/sh +set -eu + +group=authentik +config_file='/etc/authentik/config.yml' + +setcap 'cap_net_bind_service=+ep' /usr/share/webapps/authentik/server + +if [ $(grep '@@SECRET_KEY@@' "$config_file") ]; then + echo "* Generating random secret in $config_file" >&2 + + secret_key="$(pwgen -s 50 1)" + sed -i "s|@@SECRET_KEY@@|$secret_key|" "$config_file" + chown root:$group "$config_file" +fi + +if [ "${0##*.}" = 'post-upgrade' ]; then + cat >&2 <<-EOF + * + * To finish Authentik upgrade run: + * + * authentik-manage migrate + * + EOF +else + cat >&2 <<-EOF + * + * 1. Adjust settings in /etc/authentik/config.yml. + * + * 2. Create database for Authentik: + * + * psql -c "CREATE ROLE authentik PASSWORD 'top-secret' INHERIT LOGIN;" + * psql -c "CREATE DATABASE authentik OWNER authentik ENCODING 'UTF-8';" + * + * 3. Run "authentik-manage migrate" + * 4. Setup admin user at https:///if/flow/initial-setup/ + * + EOF +fi diff --git a/user/codeberg-pages-server/codeberg-pages-server.post-upgrade b/user/codeberg-pages-server/codeberg-pages-server.post-upgrade new file mode 120000 index 0000000..d7ffea2 --- /dev/null +++ b/user/codeberg-pages-server/codeberg-pages-server.post-upgrade @@ -0,0 +1 @@ +codeberg-pages-server.post-install \ No newline at end of file diff --git a/user/codeberg-pages-server/codeberg-pages-server.pre-install b/user/codeberg-pages-server/codeberg-pages-server.pre-install new file mode 100644 index 0000000..792f304 --- /dev/null +++ b/user/codeberg-pages-server/codeberg-pages-server.pre-install @@ -0,0 +1,26 @@ +#!/bin/sh +# It's very important to set user/group correctly. + +authentik_dir='/var/lib/authentik' + +if ! getent group authentik 1>/dev/null; then + echo '* Creating group authentik' 1>&2 + + addgroup -S authentik +fi + +if ! id authentik 2>/dev/null 1>&2; then + echo '* Creating user authentik' 1>&2 + + adduser -DHS -G authentik -h "$authentik_dir" -s /bin/sh \ + -g "added by apk for authentik" authentik + passwd -u authentik 1>/dev/null # unlock +fi + +if ! id -Gn authentik | grep -Fq redis; then + echo '* Adding user authentik to group redis' 1>&2 + + addgroup authentik redis +fi + +exit 0 diff --git a/user/codeberg-pages-server/upgrade-go-sqlite3-to-1.14.19.patch b/user/codeberg-pages-server/upgrade-go-sqlite3-to-1.14.19.patch new file mode 100644 index 0000000..fabb214 --- /dev/null +++ b/user/codeberg-pages-server/upgrade-go-sqlite3-to-1.14.19.patch @@ -0,0 +1,26 @@ +diff --git a/go.mod.orig b/go.mod +index eba292e..00310e5 100644 +--- a/go.mod.orig ++++ b/go.mod +@@ -11,7 +11,7 @@ require ( + github.com/go-sql-driver/mysql v1.6.0 + github.com/joho/godotenv v1.4.0 + github.com/lib/pq v1.10.7 +- github.com/mattn/go-sqlite3 v1.14.16 ++ github.com/mattn/go-sqlite3 v1.14.19 + github.com/microcosm-cc/bluemonday v1.0.26 + github.com/reugn/equalizer v0.0.0-20210216135016-a959c509d7ad + github.com/rs/zerolog v1.27.0 +diff --git a/go.sum.orig b/go.sum +index 7ea8b78..19145ea 100644 +--- a/go.sum.orig ++++ b/go.sum +@@ -479,6 +479,8 @@ github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m + github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= + github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= + github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= ++github.com/mattn/go-sqlite3 v1.14.19 h1:fhGleo2h1p8tVChob4I9HpmVFIAkKGpiukdrgQbWfGI= ++github.com/mattn/go-sqlite3 v1.14.19/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= + github.com/mattn/go-tty v0.0.0-20180219170247-931426f7535a/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= + github.com/mattn/go-tty v0.0.3/go.mod h1:ihxohKRERHTVzN+aSVRwACLCeqIoZAWpoICkkvrWyR0= + github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= diff --git a/user/filebrowser/APKBUILD b/user/filebrowser/APKBUILD deleted file mode 100644 index 7ff2627..0000000 --- a/user/filebrowser/APKBUILD +++ /dev/null @@ -1,53 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -pkgname=filebrowser -pkgver=1.0.3 -_gittag="v$pkgver-stable" -pkgrel=0 -pkgdesc="Standalone web file manager" -arch="all" -url="https://github.com/gtsteffaniak/filebrowser" -license="Apache-2.0" -depends="libcap-setcap" -makedepends="go nodejs npm" -source=" - $pkgname-$_gittag.tar.gz::https://github.com/gtsteffaniak/filebrowser/archive/refs/tags/$_gittag.tar.gz - frontend-package-lock.json - filebrowser.openrc - " -builddir="$srcdir"/$pkgname-${_gittag/v} -options="!check" # TODO: setup test suite -subpackages="$pkgname-openrc" -install="$pkgname.pre-install $pkgname.post-upgrade" - -prepare() { - default_prepare - ( - cd "$builddir"/frontend - cp "$srcdir"/frontend-package-lock.json package-lock.json - npm ci - ) -} - -build() { - ( - cd "$builddir"/frontend - npm run build - ) - ( - cd "$builddir"/backend - go build -o filebrowser \ - --ldflags="-w -s -X 'github.com/gtsteffaniak/filebrowser/backend/common/version.CommitSHA=production' \ - -X 'github.com/gtsteffaniak/filebrowser/backend/common/version.Version=$pkgver'" - ) -} - -package() { - install -Dm755 "$builddir"/backend/filebrowser "$pkgdir"/usr/bin/filebrowser - install -Dm755 "$srcdir"/filebrowser.openrc "$pkgdir"/etc/init.d/filebrowser - install -Dm644 "$builddir"/frontend/public/config.generated.yaml "$pkgdir"/etc/filebrowser/filebrowser.yaml -} -sha512sums=" -7919d391e45c7a88bcbff61f6d63963fe559afe21170c2940ae7895e6b794ce68af0742d4ce81584437b14e603a4ff8b95fb1fb16d72a032a40b76986ed8981b filebrowser-v1.0.3-stable.tar.gz -4ffe0c2ae7d6d972950fb38c9c777c20e3f507da6b4562231e09843b3ae618362ffdfbaf6dbb60959b3811c1856eb326d608e9d32e236bac405c65974e6e1e50 frontend-package-lock.json -06319bc67b088b5ffdad01a575691d82c5319730b4e46975bfc09ebb7466d6913eaca73e93f8db7b8c8bc374e6b9e35634ff1a69e701d24a5d2eae444de6bdf7 filebrowser.openrc -" diff --git a/user/filebrowser/filebrowser.openrc b/user/filebrowser/filebrowser.openrc deleted file mode 100644 index 3282368..0000000 --- a/user/filebrowser/filebrowser.openrc +++ /dev/null @@ -1,30 +0,0 @@ -#!/sbin/openrc-run - -description="File browser for ${RC_SVCNAME/*.}" -supervisor=supervise-daemon -respawn_max=0 -respawn_delay=10 - - -# Change $directory to path to middleware scripts -directory=${directory:-/var/lib/${RC_SVCNAME/.*}/${RC_SVCNAME/*.}} -pidfile=${pidfile:-/run/$RC_SVCNAME.pid} - -log_dir="/var/log/${RC_SVCNAME/.*}/" -logfile=${logfile:-$log_dir/${RC_SVCNAME/*.}.log} -output_log="${output_log:-$logfile}" -error_log="${error_log:-$logfile}" - -command=${command:-/usr/bin/filebrowser} -command_args="-c /etc/filebrowser/${RC_SVCNAME/*.}.yaml" -command_user=${command_user:-filebrowser:filebrowser} -command_background=true - -depend() { - need net -} - -start_pre() { - checkpath --owner=$command_user --directory $log_dir /var/lib/filebrowser $directory - cd $directory -} diff --git a/user/filebrowser/filebrowser.post-upgrade b/user/filebrowser/filebrowser.post-upgrade deleted file mode 120000 index 85089dd..0000000 --- a/user/filebrowser/filebrowser.post-upgrade +++ /dev/null @@ -1 +0,0 @@ -filebrowser.pre-install \ No newline at end of file diff --git a/user/filebrowser/filebrowser.pre-install b/user/filebrowser/filebrowser.pre-install deleted file mode 100644 index b79bd82..0000000 --- a/user/filebrowser/filebrowser.pre-install +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/sh - -setcap 'cap_net_bind_service=+ep' /usr/bin/filebrowser - -if [ "${0##*.}" = 'pre-install' ]; then - cat >&2 <<-EOF - -1. Generate filebrowser config file - - cd /etc/filebrowser - filebrowser setup - -2. Rename config.yaml to $service.yaml (i.e. movies.yaml) and adjust as desired (see https://filebrowserquantum.com/en/docs/configuration/configuration-overview/ for more information) -3. Create symbolic link for service file, enable, and start - - ln -s /etc/init.d/filebrowser /etc/init.d/filebrowser.$service - rc-update add filebrowser.$service - service filebrowser.$service - -You should now be able to go to http://ip-address:port (default 80) - -For more documentation, go to https://filebrowserquantum.com/en/docs - - EOF - - if ! getent group filebrowser 1>/dev/null; then - echo 'Creating group filebrowser' 1>&2 - - addgroup -S filebrowser - fi - - if ! id filebrowser 2>/dev/null 1>&2; then - echo 'Creating user filebrowser' 1>&2 - - adduser -DHS -G filebrowser -h "$DATADIR" -s /bin/sh \ - -g "added by apk for filebrowser" filebrowser - passwd -u filebrowser 1>/dev/null # unlock - fi - - if ! id -Gn filebrowser | grep -Fq www-data; then - echo 'Adding user filebrowser to group www-data' 1>&2 - - addgroup filebrowser www-data - fi - - exit 0 -fi diff --git a/user/filebrowser/frontend-package-lock.json b/user/filebrowser/frontend-package-lock.json deleted file mode 100644 index fca845b..0000000 --- a/user/filebrowser/frontend-package-lock.json +++ /dev/null @@ -1,7568 +0,0 @@ -{ - "name": "filebrowser-frontend", - "version": "3.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "filebrowser-frontend", - "version": "3.0.0", - "dependencies": { - "@onlyoffice/document-editor-vue": "^1.4.0", - "@skjnldsv/vue-plyr": "^7.5.0", - "ace-builds": "^1.24.2", - "axios": "^1.7.9", - "clipboard": "^2.0.4", - "css-vars-ponyfill": "^2.4.3", - "dompurify": "^3.2.4", - "epubjs": "^0.3.93", - "file-loader": "^6.2.0", - "glob": "^9.3.5", - "highlight.js": "^11.11.1", - "mammoth": "^1.9.1", - "marked": "^15.0.6", - "normalize.css": "^8.0.1", - "qrcode.vue": "^3.4.1", - "srt-support-for-html5-videos": "^2.6.11", - "vue": "^3.4.21", - "vue-i18n": "^9.10.2", - "vue-lazyload": "^3.0.0", - "vue-router": "^4.3.0" - }, - "devDependencies": { - "@intlify/eslint-plugin-vue-i18n": "^3.2.0", - "@intlify/unplugin-vue-i18n": "^4.0.0", - "@playwright/test": "^1.54.1", - "@types/node": "^24.1.0", - "@vitejs/plugin-vue": "^5.0.4", - "@vue/eslint-config-typescript": "^13.0.0", - "deepl-node": "^1.18.0", - "eslint": "^8.57.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-vue": "^9.24.0", - "fs-extra": "^11.3.0", - "jsdom": "^25.0.1", - "vite": "^6.2.0", - "vite-plugin-checker": "^0.10.3", - "vite-plugin-compression2": "^1.0.0", - "vitest": "^3.0.7", - "vue-tsc": "^2.0.7" - }, - "engines": { - "node": ">=20.0.0", - "npm": ">=9.0.0" - } - }, - "node_modules/@asamuzakjp/css-color": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", - "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@csstools/css-calc": "^2.1.3", - "@csstools/css-color-parser": "^3.0.9", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "lru-cache": "^10.4.3" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.5" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", - "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@csstools/color-helpers": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", - "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - } - }, - "node_modules/@csstools/css-calc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", - "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-color-parser": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", - "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/color-helpers": "^5.1.0", - "@csstools/css-calc": "^2.1.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", - "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-tokenizer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", - "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", - "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", - "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", - "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", - "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", - "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", - "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", - "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", - "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", - "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", - "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", - "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", - "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", - "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", - "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", - "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", - "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", - "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", - "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", - "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", - "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", - "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", - "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", - "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", - "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", - "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", - "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", - "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.1", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@intlify/bundle-utils": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@intlify/bundle-utils/-/bundle-utils-8.0.0.tgz", - "integrity": "sha512-1B++zykRnMwQ+20SpsZI1JCnV/YJt9Oq7AGlEurzkWJOFtFAVqaGc/oV36PBRYeiKnTbY9VYfjBimr2Vt42wLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@intlify/message-compiler": "^9.4.0", - "@intlify/shared": "^9.4.0", - "acorn": "^8.8.2", - "escodegen": "^2.1.0", - "estree-walker": "^2.0.2", - "jsonc-eslint-parser": "^2.3.0", - "mlly": "^1.2.0", - "source-map-js": "^1.0.1", - "yaml-eslint-parser": "^1.2.2" - }, - "engines": { - "node": ">= 14.16" - }, - "peerDependenciesMeta": { - "petite-vue-i18n": { - "optional": true - }, - "vue-i18n": { - "optional": true - } - } - }, - "node_modules/@intlify/core-base": { - "version": "9.14.5", - "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.14.5.tgz", - "integrity": "sha512-5ah5FqZG4pOoHjkvs8mjtv+gPKYU0zCISaYNjBNNqYiaITxW8ZtVih3GS/oTOqN8d9/mDLyrjD46GBApNxmlsA==", - "license": "MIT", - "dependencies": { - "@intlify/message-compiler": "9.14.5", - "@intlify/shared": "9.14.5" - }, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/kazupon" - } - }, - "node_modules/@intlify/eslint-plugin-vue-i18n": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@intlify/eslint-plugin-vue-i18n/-/eslint-plugin-vue-i18n-3.2.0.tgz", - "integrity": "sha512-TOIrD4tJE48WMyVIB8bNeQJJPYo1Prpqnm9Xpn1UZmcqlELhm8hmP8QyJnkgesfbG7hyiX/kvo63W7ClEQmhpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint/eslintrc": "^3.0.0", - "@intlify/core-base": "^9.12.0", - "@intlify/message-compiler": "^9.12.0", - "debug": "^4.3.4", - "eslint-compat-utils": "^0.6.0", - "glob": "^10.3.3", - "globals": "^15.0.0", - "ignore": "^6.0.0", - "import-fresh": "^3.3.0", - "is-language-code": "^3.1.0", - "js-yaml": "^4.1.0", - "json5": "^2.2.3", - "jsonc-eslint-parser": "^2.3.0", - "lodash": "^4.17.21", - "parse5": "^7.1.2", - "semver": "^7.5.4", - "synckit": "^0.9.0", - "vue-eslint-parser": "^9.3.1", - "yaml-eslint-parser": "^1.2.2" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "eslint": "^8.0.0 || ^9.0.0-0" - } - }, - "node_modules/@intlify/eslint-plugin-vue-i18n/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@intlify/eslint-plugin-vue-i18n/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@intlify/eslint-plugin-vue-i18n/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@intlify/eslint-plugin-vue-i18n/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/@intlify/message-compiler": { - "version": "9.14.5", - "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.14.5.tgz", - "integrity": "sha512-IHzgEu61/YIpQV5Pc3aRWScDcnFKWvQA9kigcINcCBXN8mbW+vk9SK+lDxA6STzKQsVJxUPg9ACC52pKKo3SVQ==", - "license": "MIT", - "dependencies": { - "@intlify/shared": "9.14.5", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/kazupon" - } - }, - "node_modules/@intlify/shared": { - "version": "9.14.5", - "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.14.5.tgz", - "integrity": "sha512-9gB+E53BYuAEMhbCAxVgG38EZrk59sxBtv3jSizNL2hEWlgjBjAw1AwpLHtNaeda12pe6W20OGEa0TwuMSRbyQ==", - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/kazupon" - } - }, - "node_modules/@intlify/unplugin-vue-i18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-4.0.0.tgz", - "integrity": "sha512-q2Mhqa/mLi0tulfLFO4fMXXvEbkSZpI5yGhNNsLTNJJ41icEGUuyDe+j5zRZIKSkOJRgX6YbCyibTDJdRsukmw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@intlify/bundle-utils": "^8.0.0", - "@intlify/shared": "^9.4.0", - "@rollup/pluginutils": "^5.1.0", - "@vue/compiler-sfc": "^3.2.47", - "debug": "^4.3.3", - "fast-glob": "^3.2.12", - "js-yaml": "^4.1.0", - "json5": "^2.2.3", - "pathe": "^1.0.0", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2", - "unplugin": "^1.1.0" - }, - "engines": { - "node": ">= 14.16" - }, - "peerDependencies": { - "petite-vue-i18n": "*", - "vue-i18n": "*", - "vue-i18n-bridge": "*" - }, - "peerDependenciesMeta": { - "petite-vue-i18n": { - "optional": true - }, - "vue-i18n": { - "optional": true - }, - "vue-i18n-bridge": { - "optional": true - } - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", - "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@onlyoffice/document-editor-vue": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@onlyoffice/document-editor-vue/-/document-editor-vue-1.6.1.tgz", - "integrity": "sha512-sdU7h684ESSdXvGNDcMf73UmToiZGMVO5QRIazTmGfm+bKOnT5ildomeagYFdnQaHQH0J28EJqc4jqXOcQbicA==", - "license": "Apache-2.0", - "dependencies": { - "lodash": "^4.17.21" - }, - "peerDependencies": { - "vue": "^3.0.0" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pkgr/core": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.2.tgz", - "integrity": "sha512-fdDH1LSGfZdTH2sxdpVMw31BanV28K/Gry0cVFxaNP77neJSkd82mM8ErPNYs9e+0O7SdHBLTDzDgwUuy18RnQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/@playwright/test": { - "version": "1.57.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.57.0.tgz", - "integrity": "sha512-6TyEnHgd6SArQO8UO2OMTxshln3QMWBtPGrOCgs3wVEmQmwyuNtB10IZMfmYDE0riwNR1cu4q+pPcxMVtaG3TA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.57.0" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", - "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.5.tgz", - "integrity": "sha512-iDGS/h7D8t7tvZ1t6+WPK04KD0MwzLZrG0se1hzBjSi5fyxlsiggoJHwh18PCFNn7tG43OWb6pdZ6Y+rMlmyNQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.5.tgz", - "integrity": "sha512-wrSAViWvZHBMMlWk6EJhvg8/rjxzyEhEdgfMMjREHEq11EtJ6IP6yfcCH57YAEca2Oe3FNCE9DSTgU70EIGmVw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.5.tgz", - "integrity": "sha512-S87zZPBmRO6u1YXQLwpveZm4JfPpAa6oHBX7/ghSiGH3rz/KDgAu1rKdGutV+WUI6tKDMbaBJomhnT30Y2t4VQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.5.tgz", - "integrity": "sha512-YTbnsAaHo6VrAczISxgpTva8EkfQus0VPEVJCEaboHtZRIb6h6j0BNxRBOwnDciFTZLDPW5r+ZBmhL/+YpTZgA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.5.tgz", - "integrity": "sha512-1T8eY2J8rKJWzaznV7zedfdhD1BqVs1iqILhmHDq/bqCUZsrMt+j8VCTHhP0vdfbHK3e1IQ7VYx3jlKqwlf+vw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.5.tgz", - "integrity": "sha512-sHTiuXyBJApxRn+VFMaw1U+Qsz4kcNlxQ742snICYPrY+DDL8/ZbaC4DVIB7vgZmp3jiDaKA0WpBdP0aqPJoBQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.5.tgz", - "integrity": "sha512-dV3T9MyAf0w8zPVLVBptVlzaXxka6xg1f16VAQmjg+4KMSTWDvhimI/Y6mp8oHwNrmnmVl9XxJ/w/mO4uIQONA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.5.tgz", - "integrity": "sha512-wIGYC1x/hyjP+KAu9+ewDI+fi5XSNiUi9Bvg6KGAh2TsNMA3tSEs+Sh6jJ/r4BV/bx/CyWu2ue9kDnIdRyafcQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.5.tgz", - "integrity": "sha512-Y+qVA0D9d0y2FRNiG9oM3Hut/DgODZbU9I8pLLPwAsU0tUKZ49cyV1tzmB/qRbSzGvY8lpgGkJuMyuhH7Ma+Vg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.5.tgz", - "integrity": "sha512-juaC4bEgJsyFVfqhtGLz8mbopaWD+WeSOYr5E16y+1of6KQjc0BpwZLuxkClqY1i8sco+MdyoXPNiCkQou09+g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.5.tgz", - "integrity": "sha512-rIEC0hZ17A42iXtHX+EPJVL/CakHo+tT7W0pbzdAGuWOt2jxDFh7A/lRhsNHBcqL4T36+UiAgwO8pbmn3dE8wA==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.5.tgz", - "integrity": "sha512-T7l409NhUE552RcAOcmJHj3xyZ2h7vMWzcwQI0hvn5tqHh3oSoclf9WgTl+0QqffWFG8MEVZZP1/OBglKZx52Q==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.5.tgz", - "integrity": "sha512-7OK5/GhxbnrMcxIFoYfhV/TkknarkYC1hqUw1wU2xUN3TVRLNT5FmBv4KkheSG2xZ6IEbRAhTooTV2+R5Tk0lQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.5.tgz", - "integrity": "sha512-GwuDBE/PsXaTa76lO5eLJTyr2k8QkPipAyOrs4V/KJufHCZBJ495VCGJol35grx9xryk4V+2zd3Ri+3v7NPh+w==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.5.tgz", - "integrity": "sha512-IAE1Ziyr1qNfnmiQLHBURAD+eh/zH1pIeJjeShleII7Vj8kyEm2PF77o+lf3WTHDpNJcu4IXJxNO0Zluro8bOw==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.5.tgz", - "integrity": "sha512-Pg6E+oP7GvZ4XwgRJBuSXZjcqpIW3yCBhK4BcsANvb47qMvAbCjR6E+1a/U2WXz1JJxp9/4Dno3/iSJLcm5auw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.5.tgz", - "integrity": "sha512-txGtluxDKTxaMDzUduGP0wdfng24y1rygUMnmlUJ88fzCCULCLn7oE5kb2+tRB+MWq1QDZT6ObT5RrR8HFRKqg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.5.tgz", - "integrity": "sha512-3DFiLPnTxiOQV993fMc+KO8zXHTcIjgaInrqlG8zDp1TlhYl6WgrOHuJkJQ6M8zHEcntSJsUp1XFZSY8C1DYbg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.5.tgz", - "integrity": "sha512-nggc/wPpNTgjGg75hu+Q/3i32R00Lq1B6N1DO7MCU340MRKL3WZJMjA9U4K4gzy3dkZPXm9E1Nc81FItBVGRlA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.5.tgz", - "integrity": "sha512-U/54pTbdQpPLBdEzCT6NBCFAfSZMvmjr0twhnD9f4EIvlm9wy3jjQ38yQj1AGznrNO65EWQMgm/QUjuIVrYF9w==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.5.tgz", - "integrity": "sha512-2NqKgZSuLH9SXBBV2dWNRCZmocgSOx8OJSdpRaEcRlIfX8YrKxUT6z0F1NpvDVhOsl190UFTRh2F2WDWWCYp3A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.5.tgz", - "integrity": "sha512-JRpZUhCfhZ4keB5v0fe02gQJy05GqboPOaxvjugW04RLSYYoB/9t2lx2u/tMs/Na/1NXfY8QYjgRljRpN+MjTQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@skjnldsv/vue-plyr": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@skjnldsv/vue-plyr/-/vue-plyr-7.5.0.tgz", - "integrity": "sha512-JmbKPe8Eh0yTP+7w4VYeqGhrUqDKM4qSsCn37CbADAvvwMvceBwYC0IBXil0RBtyzStxwXPtOj1oI//lQ5DeTw==", - "license": "MIT", - "dependencies": { - "plyr": "^3.7.8", - "vue": "^3.3.4" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0", - "npm": "^9.0.0 || ^10.0.0" - } - }, - "node_modules/@types/chai": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", - "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/deep-eql": "*", - "assertion-error": "^2.0.1" - } - }, - "node_modules/@types/deep-eql": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", - "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "license": "MIT" - }, - "node_modules/@types/localforage": { - "version": "0.0.34", - "resolved": "https://registry.npmjs.org/@types/localforage/-/localforage-0.0.34.tgz", - "integrity": "sha512-tJxahnjm9dEI1X+hQSC5f2BSd/coZaqbIl1m3TCl0q9SVuC52XcXfV0XmoCU1+PmjyucuVITwoTnN8OlTbEXXA==", - "deprecated": "This is a stub types definition for localforage (https://github.com/localForage/localForage). localforage provides its own type definitions, so you don't need @types/localforage installed!", - "license": "MIT", - "dependencies": { - "localforage": "*" - } - }, - "node_modules/@types/node": { - "version": "24.10.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.4.tgz", - "integrity": "sha512-vnDVpYPMzs4wunl27jHrfmwojOGKya0xyM3sH+UE5iv5uPS6vX7UIoh6m+vQc5LGBq52HBKPIn/zcSZVzeDEZg==", - "license": "MIT", - "dependencies": { - "undici-types": "~7.16.0" - } - }, - "node_modules/@types/trusted-types": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", - "license": "MIT", - "optional": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", - "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/type-utils": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", - "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", - "dev": true, - "license": "ISC" - }, - "node_modules/@vitejs/plugin-vue": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", - "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "vite": "^5.0.0 || ^6.0.0", - "vue": "^3.2.25" - } - }, - "node_modules/@vitest/expect": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", - "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/chai": "^5.2.2", - "@vitest/spy": "3.2.4", - "@vitest/utils": "3.2.4", - "chai": "^5.2.0", - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/mocker": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", - "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/spy": "3.2.4", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.17" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "msw": "^2.4.9", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" - }, - "peerDependenciesMeta": { - "msw": { - "optional": true - }, - "vite": { - "optional": true - } - } - }, - "node_modules/@vitest/mocker/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/@vitest/pretty-format": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", - "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/runner": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz", - "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/utils": "3.2.4", - "pathe": "^2.0.3", - "strip-literal": "^3.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/runner/node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@vitest/snapshot": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz", - "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "3.2.4", - "magic-string": "^0.30.17", - "pathe": "^2.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/snapshot/node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@vitest/spy": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", - "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyspy": "^4.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/utils": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", - "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "3.2.4", - "loupe": "^3.1.4", - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@volar/language-core": { - "version": "2.4.15", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.15.tgz", - "integrity": "sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/source-map": "2.4.15" - } - }, - "node_modules/@volar/source-map": { - "version": "2.4.15", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.15.tgz", - "integrity": "sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@volar/typescript": { - "version": "2.4.15", - "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.15.tgz", - "integrity": "sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/language-core": "2.4.15", - "path-browserify": "^1.0.1", - "vscode-uri": "^3.0.8" - } - }, - "node_modules/@vue/compiler-core": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.25.tgz", - "integrity": "sha512-vay5/oQJdsNHmliWoZfHPoVZZRmnSWhug0BYT34njkYTPqClh3DNWLkZNJBVSjsNMrg0CCrBfoKkjZQPM/QVUw==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.28.5", - "@vue/shared": "3.5.25", - "entities": "^4.5.0", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.1" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.25.tgz", - "integrity": "sha512-4We0OAcMZsKgYoGlMjzYvaoErltdFI2/25wqanuTu+S4gismOTRTBPi4IASOjxWdzIwrYSjnqONfKvuqkXzE2Q==", - "license": "MIT", - "dependencies": { - "@vue/compiler-core": "3.5.25", - "@vue/shared": "3.5.25" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.25.tgz", - "integrity": "sha512-PUgKp2rn8fFsI++lF2sO7gwO2d9Yj57Utr5yEsDf3GNaQcowCLKL7sf+LvVFvtJDXUp/03+dC6f2+LCv5aK1ag==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.28.5", - "@vue/compiler-core": "3.5.25", - "@vue/compiler-dom": "3.5.25", - "@vue/compiler-ssr": "3.5.25", - "@vue/shared": "3.5.25", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.21", - "postcss": "^8.5.6", - "source-map-js": "^1.2.1" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.25.tgz", - "integrity": "sha512-ritPSKLBcParnsKYi+GNtbdbrIE1mtuFEJ4U1sWeuOMlIziK5GtOL85t5RhsNy4uWIXPgk+OUdpnXiTdzn8o3A==", - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.5.25", - "@vue/shared": "3.5.25" - } - }, - "node_modules/@vue/compiler-vue2": { - "version": "2.7.16", - "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", - "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", - "dev": true, - "license": "MIT", - "dependencies": { - "de-indent": "^1.0.2", - "he": "^1.2.0" - } - }, - "node_modules/@vue/devtools-api": { - "version": "6.6.4", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", - "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", - "license": "MIT" - }, - "node_modules/@vue/eslint-config-typescript": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-13.0.0.tgz", - "integrity": "sha512-MHh9SncG/sfqjVqjcuFLOLD6Ed4dRAis4HNt0dXASeAuLqIAx4YMB1/m2o4pUKK1vCt8fUvYG8KKX2Ot3BVZTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/eslint-plugin": "^7.1.1", - "@typescript-eslint/parser": "^7.1.1", - "vue-eslint-parser": "^9.3.1" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "peerDependencies": { - "eslint": "^8.56.0", - "eslint-plugin-vue": "^9.0.0", - "typescript": ">=4.7.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@vue/language-core": { - "version": "2.2.12", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.12.tgz", - "integrity": "sha512-IsGljWbKGU1MZpBPN+BvPAdr55YPkj2nB/TBNGNC32Vy2qLG25DYu/NBN2vNtZqdRbTRjaoYrahLrToim2NanA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/language-core": "2.4.15", - "@vue/compiler-dom": "^3.5.0", - "@vue/compiler-vue2": "^2.7.16", - "@vue/shared": "^3.5.0", - "alien-signals": "^1.0.3", - "minimatch": "^9.0.3", - "muggle-string": "^0.4.1", - "path-browserify": "^1.0.1" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@vue/language-core/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@vue/language-core/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@vue/reactivity": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.25.tgz", - "integrity": "sha512-5xfAypCQepv4Jog1U4zn8cZIcbKKFka3AgWHEFQeK65OW+Ys4XybP6z2kKgws4YB43KGpqp5D/K3go2UPPunLA==", - "license": "MIT", - "dependencies": { - "@vue/shared": "3.5.25" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.25.tgz", - "integrity": "sha512-Z751v203YWwYzy460bzsYQISDfPjHTl+6Zzwo/a3CsAf+0ccEjQ8c+0CdX1WsumRTHeywvyUFtW6KvNukT/smA==", - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.25", - "@vue/shared": "3.5.25" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.25.tgz", - "integrity": "sha512-a4WrkYFbb19i9pjkz38zJBg8wa/rboNERq3+hRRb0dHiJh13c+6kAbgqCPfMaJ2gg4weWD3APZswASOfmKwamA==", - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.25", - "@vue/runtime-core": "3.5.25", - "@vue/shared": "3.5.25", - "csstype": "^3.1.3" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.25.tgz", - "integrity": "sha512-UJaXR54vMG61i8XNIzTSf2Q7MOqZHpp8+x3XLGtE3+fL+nQd+k7O5+X3D/uWrnQXOdMw5VPih+Uremcw+u1woQ==", - "license": "MIT", - "dependencies": { - "@vue/compiler-ssr": "3.5.25", - "@vue/shared": "3.5.25" - }, - "peerDependencies": { - "vue": "3.5.25" - } - }, - "node_modules/@vue/shared": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.25.tgz", - "integrity": "sha512-AbOPdQQnAnzs58H2FrrDxYj/TJfmeS2jdfEEhgiKINy+bnOANmVizIEgq1r+C5zsbs6l1CCQxtcj71rwNQ4jWg==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "license": "MIT", - "peer": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "license": "MIT", - "peer": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "license": "MIT", - "peer": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "license": "MIT", - "peer": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "license": "MIT", - "peer": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xmldom/xmldom": { - "version": "0.7.13", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.13.tgz", - "integrity": "sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==", - "deprecated": "this version is no longer supported, please update to at least 0.8.*", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "license": "Apache-2.0", - "peer": true - }, - "node_modules/ace-builds": { - "version": "1.43.5", - "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.43.5.tgz", - "integrity": "sha512-iH5FLBKdB7SVn9GR37UgA/tpQS8OTWIxWAuq3Ofaw+Qbc69FfPXsXd9jeW7KRG2xKpKMqBDnu0tHBrCWY5QI7A==", - "license": "BSD-3-Clause" - }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-phases": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", - "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "acorn": "^8.14.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/adm-zip": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz", - "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "license": "MIT", - "peer": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT", - "peer": true - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/alien-signals": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-1.0.13.tgz", - "integrity": "sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/assertion-error": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/axios": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", - "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/baseline-browser-mapping": { - "version": "2.9.8", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.8.tgz", - "integrity": "sha512-Y1fOuNDowLfgKOypdc9SPABfoWXuZHBOyCS4cD52IeZBhr4Md6CLLs6atcxVrzRmQ06E7hSlm5bHHApPKR/byA==", - "license": "Apache-2.0", - "peer": true, - "bin": { - "baseline-browser-mapping": "dist/cli.js" - } - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", - "license": "MIT" - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true, - "license": "ISC" - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", - "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "baseline-browser-mapping": "^2.9.0", - "caniuse-lite": "^1.0.30001759", - "electron-to-chromium": "^1.5.263", - "node-releases": "^2.0.27", - "update-browserslist-db": "^1.2.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "license": "MIT", - "peer": true - }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001760", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz", - "integrity": "sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0", - "peer": true - }, - "node_modules/chai": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", - "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "assertion-error": "^2.0.1", - "check-error": "^2.1.1", - "deep-eql": "^5.0.1", - "loupe": "^3.1.0", - "pathval": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/check-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", - "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - } - }, - "node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/clipboard": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", - "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", - "license": "MIT", - "dependencies": { - "good-listener": "^1.2.2", - "select": "^1.1.2", - "tiny-emitter": "^2.0.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT", - "peer": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/confbox": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", - "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/core-js": { - "version": "3.47.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.47.0.tgz", - "integrity": "sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-vars-ponyfill": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/css-vars-ponyfill/-/css-vars-ponyfill-2.4.9.tgz", - "integrity": "sha512-aZyLue5bdiGVNCiCclNjo123D8I7kyoYNUaAvz+H1JalX1ye4Ilz7jNRRH5YbM+dYD6ucejiydGwk7lol/GCXQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.2", - "get-css-data": "^2.0.2" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssstyle": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", - "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@asamuzakjp/css-color": "^3.2.0", - "rrweb-cssom": "^0.8.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/cssstyle/node_modules/rrweb-cssom": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", - "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", - "dev": true, - "license": "MIT" - }, - "node_modules/csstype": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "license": "MIT" - }, - "node_modules/custom-event-polyfill": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/custom-event-polyfill/-/custom-event-polyfill-1.0.7.tgz", - "integrity": "sha512-TDDkd5DkaZxZFM8p+1I3yAlvM3rSr1wbrOliG4yJiwinMZN8z/iGL7BTlDkrJcYTmgUSb4ywVCc3ZaUtOtC76w==", - "license": "MIT" - }, - "node_modules/d": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", - "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", - "license": "ISC", - "dependencies": { - "es5-ext": "^0.10.64", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/data-urls": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", - "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", - "dev": true, - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decimal.js": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", - "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", - "dev": true, - "license": "MIT" - }, - "node_modules/deep-eql": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", - "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/deepl-node": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/deepl-node/-/deepl-node-1.24.0.tgz", - "integrity": "sha512-vZ9jUpzJRvFamgVOfm1LDy3YYJ7k8FhxtAX9whR92EFshLIP9JlYS0HFwXL5yYsfqzXdb/wssGRSWvR48t7nSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": ">=12.0", - "adm-zip": "^0.5.16", - "axios": "^1.7.4", - "form-data": "^3.0.0", - "loglevel": ">=1.6.2", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=12.0" - } - }, - "node_modules/deepl-node/node_modules/form-data": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.4.tgz", - "integrity": "sha512-f0cRzm6dkyVYV3nPoooP8XlccPQukegwhAnpoLcXy+X+A8KfpGOoXwDr9FLZd3wzgLaBGQBE3lY93Zm/i1JvIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.35" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegate": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", - "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", - "license": "MIT" - }, - "node_modules/dingbat-to-unicode": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dingbat-to-unicode/-/dingbat-to-unicode-1.0.1.tgz", - "integrity": "sha512-98l0sW87ZT58pU4i61wa2OHwxbiYSbuxsCBozaVnYX2iCnr3bLM3fIes1/ej7h1YdOKuKt/MLs706TVnALA65w==", - "license": "BSD-2-Clause" - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dompurify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.1.tgz", - "integrity": "sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q==", - "license": "(MPL-2.0 OR Apache-2.0)", - "optionalDependencies": { - "@types/trusted-types": "^2.0.7" - } - }, - "node_modules/duck": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/duck/-/duck-0.1.12.tgz", - "integrity": "sha512-wkctla1O6VfP89gQ+J/yDesM0S7B7XLXjKGzXxMDVFg7uEn706niAtyYovKbyq1oT9YwDcly721/iUWoc8MVRg==", - "license": "BSD", - "dependencies": { - "underscore": "^1.13.1" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.267", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", - "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", - "license": "ISC", - "peer": true - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.18.4", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz", - "integrity": "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==", - "license": "MIT", - "peer": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/epubjs": { - "version": "0.3.93", - "resolved": "https://registry.npmjs.org/epubjs/-/epubjs-0.3.93.tgz", - "integrity": "sha512-c06pNSdBxcXv3dZSbXAVLE1/pmleRhOT6mXNZo6INKmvuKpYB65MwU/lO7830czCtjIiK9i+KR+3S+p0wtljrw==", - "license": "BSD-2-Clause", - "dependencies": { - "@types/localforage": "0.0.34", - "@xmldom/xmldom": "^0.7.5", - "core-js": "^3.18.3", - "event-emitter": "^0.3.5", - "jszip": "^3.7.1", - "localforage": "^1.10.0", - "lodash": "^4.17.21", - "marks-pane": "^1.0.9", - "path-webpack": "0.0.3" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "dev": true, - "license": "MIT" - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es5-ext": { - "version": "0.10.64", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", - "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", - "hasInstallScript": true, - "license": "ISC", - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "esniff": "^2.0.1", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "license": "MIT", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", - "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", - "license": "ISC", - "dependencies": { - "d": "^1.0.2", - "ext": "^1.7.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/esbuild": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", - "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.12", - "@esbuild/android-arm": "0.25.12", - "@esbuild/android-arm64": "0.25.12", - "@esbuild/android-x64": "0.25.12", - "@esbuild/darwin-arm64": "0.25.12", - "@esbuild/darwin-x64": "0.25.12", - "@esbuild/freebsd-arm64": "0.25.12", - "@esbuild/freebsd-x64": "0.25.12", - "@esbuild/linux-arm": "0.25.12", - "@esbuild/linux-arm64": "0.25.12", - "@esbuild/linux-ia32": "0.25.12", - "@esbuild/linux-loong64": "0.25.12", - "@esbuild/linux-mips64el": "0.25.12", - "@esbuild/linux-ppc64": "0.25.12", - "@esbuild/linux-riscv64": "0.25.12", - "@esbuild/linux-s390x": "0.25.12", - "@esbuild/linux-x64": "0.25.12", - "@esbuild/netbsd-arm64": "0.25.12", - "@esbuild/netbsd-x64": "0.25.12", - "@esbuild/openbsd-arm64": "0.25.12", - "@esbuild/openbsd-x64": "0.25.12", - "@esbuild/openharmony-arm64": "0.25.12", - "@esbuild/sunos-x64": "0.25.12", - "@esbuild/win32-arm64": "0.25.12", - "@esbuild/win32-ia32": "0.25.12", - "@esbuild/win32-x64": "0.25.12" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-compat-utils": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.6.5.tgz", - "integrity": "sha512-vAUHYzue4YAa2hNACjB8HvUQj5yehAZgiClyFVVom9cP8z5NSFq3PwB/TtJslN2zAMgRX6FCFCjYBbQh71g5RQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "node_modules/eslint-config-prettier": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.2.tgz", - "integrity": "sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==", - "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-plugin-vue": { - "version": "9.33.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.33.0.tgz", - "integrity": "sha512-174lJKuNsuDIlLpjeXc5E2Tss8P44uIimAfGD0b90k0NoirJqpG7stLuU9Vp/9ioTOrQdWVREc4mRd1BD+CvGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "globals": "^13.24.0", - "natural-compare": "^1.4.0", - "nth-check": "^2.1.1", - "postcss-selector-parser": "^6.0.15", - "semver": "^7.6.3", - "vue-eslint-parser": "^9.4.3", - "xml-name-validator": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" - } - }, - "node_modules/eslint-plugin-vue/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/esniff": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", - "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", - "license": "ISC", - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.62", - "event-emitter": "^0.3.5", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "license": "MIT" - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", - "license": "MIT", - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/expect-type": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", - "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "license": "ISC", - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "dev": true, - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fs-extra": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-css-data": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/get-css-data/-/get-css-data-2.1.1.tgz", - "integrity": "sha512-JpMa/f5P4mDXKg6l5/2cHL5xNY77Jap7tHyduMa6BF0E2a7bQ6Tvaz2BIMjeVYZYLcmOZ5w2Ro0yVJEI41tMbw==", - "license": "MIT" - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "license": "BSD-2-Clause", - "peer": true - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/globals": { - "version": "15.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/good-listener": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", - "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", - "license": "MIT", - "dependencies": { - "delegate": "^3.1.2" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/highlight.js": { - "version": "11.11.1", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz", - "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", - "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-encoding": "^3.1.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-6.0.2.tgz", - "integrity": "sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "license": "MIT" - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-language-code": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-language-code/-/is-language-code-3.1.0.tgz", - "integrity": "sha512-zJdQ3QTeLye+iphMeK3wks+vXSRFKh68/Pnlw7aOfApFSEIOhYa8P9vwwa6QrImNNBMJTiL1PpYF0f4BxDuEgA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.14.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsdom": { - "version": "25.0.1", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz", - "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssstyle": "^4.1.0", - "data-urls": "^5.0.0", - "decimal.js": "^10.4.3", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^4.0.0", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.5", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.12", - "parse5": "^7.1.2", - "rrweb-cssom": "^0.7.1", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^5.0.0", - "w3c-xmlserializer": "^5.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^3.1.1", - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0", - "ws": "^8.18.0", - "xml-name-validator": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "canvas": "^2.11.2" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/xml-name-validator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", - "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "license": "MIT", - "peer": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-eslint-parser": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.2.tgz", - "integrity": "sha512-1e4qoRgnn448pRuMvKGsFFymUCquZV0mpGgOyIKNgD3JVDTsVJyRBGH/Fm0tBb8WsWGgmB1mDe6/yJMQM37DUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.5.0", - "eslint-visitor-keys": "^3.0.0", - "espree": "^9.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - } - }, - "node_modules/jsonc-eslint-parser/node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jszip": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "license": "(MIT OR GPL-3.0-or-later)", - "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "license": "MIT", - "dependencies": { - "immediate": "~3.0.5" - } - }, - "node_modules/loader-runner": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", - "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6.11.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/loadjs": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loadjs/-/loadjs-4.3.0.tgz", - "integrity": "sha512-vNX4ZZLJBeDEOBvdr2v/F+0aN5oMuPu7JTqrMwp+DtgK+AryOlpy6Xtm2/HpNr+azEa828oQjOtWsB6iDtSfSQ==", - "license": "MIT" - }, - "node_modules/localforage": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", - "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", - "license": "Apache-2.0", - "dependencies": { - "lie": "3.1.1" - } - }, - "node_modules/localforage/node_modules/lie": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", - "license": "MIT", - "dependencies": { - "immediate": "~3.0.5" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/loglevel": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz", - "integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/loglevel" - } - }, - "node_modules/lop": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/lop/-/lop-0.4.2.tgz", - "integrity": "sha512-RefILVDQ4DKoRZsJ4Pj22TxE3omDO47yFpkIBoDKzkqPRISs5U1cnAdg/5583YPkWPaLIYHOKRMQSvjFsO26cw==", - "license": "BSD-2-Clause", - "dependencies": { - "duck": "^0.1.12", - "option": "~0.2.1", - "underscore": "^1.13.1" - } - }, - "node_modules/loupe": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", - "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, - "node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "node_modules/mammoth": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/mammoth/-/mammoth-1.11.0.tgz", - "integrity": "sha512-BcEqqY/BOwIcI1iR5tqyVlqc3KIaMRa4egSoK83YAVrBf6+yqdAAbtUcFDCWX8Zef8/fgNZ6rl4VUv+vVX8ddQ==", - "license": "BSD-2-Clause", - "dependencies": { - "@xmldom/xmldom": "^0.8.6", - "argparse": "~1.0.3", - "base64-js": "^1.5.1", - "bluebird": "~3.4.0", - "dingbat-to-unicode": "^1.0.1", - "jszip": "^3.7.1", - "lop": "^0.4.2", - "path-is-absolute": "^1.0.0", - "underscore": "^1.13.1", - "xmlbuilder": "^10.0.0" - }, - "bin": { - "mammoth": "bin/mammoth" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/mammoth/node_modules/@xmldom/xmldom": { - "version": "0.8.11", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz", - "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/mammoth/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/marked": { - "version": "15.0.12", - "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", - "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", - "license": "MIT", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/marks-pane": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/marks-pane/-/marks-pane-1.0.9.tgz", - "integrity": "sha512-Ahs4oeG90tbdPWwAJkAAoHg2lRR8lAs9mZXETNPO9hYg3AkjUJBKi1NQ4aaIQZVGrig7c/3NUV1jANl8rFTeMg==", - "license": "MIT" - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "license": "MIT", - "peer": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minipass": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/mlly": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz", - "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.15.0", - "pathe": "^2.0.3", - "pkg-types": "^1.3.1", - "ufo": "^1.6.1" - } - }, - "node_modules/mlly/node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/muggle-string": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", - "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "license": "MIT", - "peer": true - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "license": "ISC" - }, - "node_modules/node-releases": { - "version": "2.0.27", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", - "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", - "license": "MIT", - "peer": true - }, - "node_modules/normalize.css": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", - "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==", - "license": "MIT" - }, - "node_modules/npm-run-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", - "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^4.0.0", - "unicorn-magic": "^0.3.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nwsapi": { - "version": "2.2.23", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.23.tgz", - "integrity": "sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/option": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/option/-/option-0.2.4.tgz", - "integrity": "sha512-pkEqbDyl8ou5cpq+VsnQbe/WlEy5qS7xPzMS1U55OCG9KPvwFD46zDbxQIj3egJSFc3D+XhYOPUzz49zQAVy7A==", - "license": "BSD-2-Clause" - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "license": "(MIT AND Zlib)" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^6.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-webpack": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/path-webpack/-/path-webpack-0.0.3.tgz", - "integrity": "sha512-AmeDxedoo5svf7aB3FYqSAKqMxys014lVKBzy1o/5vv9CtU7U4wgGWL1dA2o6MOzcD53ScN4Jmiq6VbtLz1vIQ==", - "license": "MIT" - }, - "node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pathval": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", - "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.16" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-types": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", - "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "confbox": "^0.1.8", - "mlly": "^1.7.4", - "pathe": "^2.0.1" - } - }, - "node_modules/pkg-types/node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, - "node_modules/playwright": { - "version": "1.57.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.57.0.tgz", - "integrity": "sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.57.0" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.57.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.57.0.tgz", - "integrity": "sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/plyr": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/plyr/-/plyr-3.8.3.tgz", - "integrity": "sha512-0+iI5uw0WRvtKBpgPCkmQQv7ucHVQKTEo6UFJjgJ8cy/JZhy0dQqshHQVitHXV6l2O3MzhgnuvQ95VSkWcWeSw==", - "license": "MIT", - "dependencies": { - "core-js": "^3.45.1", - "custom-event-polyfill": "^1.0.7", - "loadjs": "^4.3.0", - "rangetouch": "^2.0.1", - "url-polyfill": "^1.1.13" - } - }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "license": "MIT" - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/qrcode.vue": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/qrcode.vue/-/qrcode.vue-3.6.0.tgz", - "integrity": "sha512-vQcl2fyHYHMjDO1GguCldJxepq2izQjBkDEEu9NENgfVKP6mv/e2SU62WbqYHGwTgWXLhxZ1NCD1dAZKHQq1fg==", - "license": "MIT", - "peerDependencies": { - "vue": "^3.0.0" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/rangetouch": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/rangetouch/-/rangetouch-2.0.1.tgz", - "integrity": "sha512-sln+pNSc8NGaHoLzwNBssFSf/rSYkqeBXzX1AtJlkJiUaVSJSbRAWJk+4omsXkN+EJalzkZhWQ3th1m0FpR5xA==", - "license": "MIT" - }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.5.tgz", - "integrity": "sha512-iTNAbFSlRpcHeeWu73ywU/8KuU/LZmNCSxp6fjQkJBD3ivUb8tpDrXhIxEzA05HlYMEwmtaUnb3RP+YNv162OQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.53.5", - "@rollup/rollup-android-arm64": "4.53.5", - "@rollup/rollup-darwin-arm64": "4.53.5", - "@rollup/rollup-darwin-x64": "4.53.5", - "@rollup/rollup-freebsd-arm64": "4.53.5", - "@rollup/rollup-freebsd-x64": "4.53.5", - "@rollup/rollup-linux-arm-gnueabihf": "4.53.5", - "@rollup/rollup-linux-arm-musleabihf": "4.53.5", - "@rollup/rollup-linux-arm64-gnu": "4.53.5", - "@rollup/rollup-linux-arm64-musl": "4.53.5", - "@rollup/rollup-linux-loong64-gnu": "4.53.5", - "@rollup/rollup-linux-ppc64-gnu": "4.53.5", - "@rollup/rollup-linux-riscv64-gnu": "4.53.5", - "@rollup/rollup-linux-riscv64-musl": "4.53.5", - "@rollup/rollup-linux-s390x-gnu": "4.53.5", - "@rollup/rollup-linux-x64-gnu": "4.53.5", - "@rollup/rollup-linux-x64-musl": "4.53.5", - "@rollup/rollup-openharmony-arm64": "4.53.5", - "@rollup/rollup-win32-arm64-msvc": "4.53.5", - "@rollup/rollup-win32-ia32-msvc": "4.53.5", - "@rollup/rollup-win32-x64-gnu": "4.53.5", - "@rollup/rollup-win32-x64-msvc": "4.53.5", - "fsevents": "~2.3.2" - } - }, - "node_modules/rrweb-cssom": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", - "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", - "dev": true, - "license": "MIT" - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "license": "MIT" - }, - "node_modules/saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", - "dev": true, - "license": "ISC", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=v12.22.7" - } - }, - "node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/select": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", - "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==", - "license": "MIT" - }, - "node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "license": "MIT" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/siginfo": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dev": true, - "license": "ISC" - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "license": "MIT", - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "license": "BSD-3-Clause" - }, - "node_modules/srt-support-for-html5-videos": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/srt-support-for-html5-videos/-/srt-support-for-html5-videos-2.6.11.tgz", - "integrity": "sha512-rHsP8iaE7vwhPHpaJPj178YZn6ak1jZvjtEA+XrRm9hhOfC3KZVK/TdNyZIi+fBFtSC+EkscWkyNFKiMuLE4IQ==" - }, - "node_modules/stackback": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", - "dev": true, - "license": "MIT" - }, - "node_modules/std-env": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", - "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", - "dev": true, - "license": "MIT" - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-literal": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz", - "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "js-tokens": "^9.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/strip-literal/node_modules/js-tokens": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", - "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true, - "license": "MIT" - }, - "node_modules/synckit": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.3.tgz", - "integrity": "sha512-JJoOEKTfL1urb1mDoEblhD9NhEbWmq9jHEMEnxoC4ujUaZ4itA8vKgwkFAyNClgxplLi9tsUKX+EduK0p/l7sg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@pkgr/core": "^0.1.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/tapable": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", - "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/tar-mini": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/tar-mini/-/tar-mini-0.2.0.tgz", - "integrity": "sha512-+qfUHz700DWnRutdUsxRRVZ38G1Qr27OetwaMYTdg8hcPxf46U0S1Zf76dQMWRBmusOt2ZCK5kbIaiLkoGO7WQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/terser": { - "version": "5.44.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.1.tgz", - "integrity": "sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==", - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.15.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.16", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz", - "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", - "license": "MIT", - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "jest-worker": "^27.4.5", - "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", - "terser": "^5.31.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT", - "peer": true - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", - "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, - "node_modules/tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", - "license": "MIT" - }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinybench": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", - "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyexec": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tinypool": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", - "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.0.0 || >=20.0.0" - } - }, - "node_modules/tinyrainbow": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", - "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tinyspy": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz", - "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tldts": { - "version": "6.1.86", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", - "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "tldts-core": "^6.1.86" - }, - "bin": { - "tldts": "bin/cli.js" - } - }, - "node_modules/tldts-core": { - "version": "6.1.86", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", - "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", - "dev": true, - "license": "MIT" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tough-cookie": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", - "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tldts": "^6.1.32" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/tr46": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", - "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "^2.3.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/ts-api-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", - "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, - "node_modules/type": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", - "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", - "license": "ISC" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "devOptional": true, - "license": "Apache-2.0", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/ufo": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", - "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", - "dev": true, - "license": "MIT" - }, - "node_modules/underscore": { - "version": "1.13.7", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", - "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", - "license": "MIT" - }, - "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", - "license": "MIT" - }, - "node_modules/unicorn-magic": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", - "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unplugin": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.1.tgz", - "integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.14.0", - "webpack-virtual-modules": "^0.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", - "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-polyfill": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/url-polyfill/-/url-polyfill-1.1.14.tgz", - "integrity": "sha512-p4f3TTAG6ADVF3mwbXw7hGw+QJyw5CnNGvYh5fCuQQZIiuKUswqcznyV3pGDP9j0TSmC4UvRKm8kl1QsX1diiQ==", - "license": "MIT" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/vite": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", - "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.25.0", - "fdir": "^6.4.4", - "picomatch": "^4.0.2", - "postcss": "^8.5.3", - "rollup": "^4.34.9", - "tinyglobby": "^0.2.13" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "jiti": ">=1.21.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/vite-node": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", - "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cac": "^6.7.14", - "debug": "^4.4.1", - "es-module-lexer": "^1.7.0", - "pathe": "^2.0.3", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" - }, - "bin": { - "vite-node": "vite-node.mjs" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/vite-node/node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, - "node_modules/vite-plugin-checker": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/vite-plugin-checker/-/vite-plugin-checker-0.10.3.tgz", - "integrity": "sha512-f4sekUcDPF+T+GdbbE8idb1i2YplBAoH+SfRS0e/WRBWb2rYb1Jf5Pimll0Rj+3JgIYWwG2K5LtBPCXxoibkLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "chokidar": "^4.0.3", - "npm-run-path": "^6.0.0", - "picocolors": "^1.1.1", - "picomatch": "^4.0.3", - "strip-ansi": "^7.1.0", - "tiny-invariant": "^1.3.3", - "tinyglobby": "^0.2.14", - "vscode-uri": "^3.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "peerDependencies": { - "@biomejs/biome": ">=1.7", - "eslint": ">=7", - "meow": "^13.2.0", - "optionator": "^0.9.4", - "stylelint": ">=16", - "typescript": "*", - "vite": ">=2.0.0", - "vls": "*", - "vti": "*", - "vue-tsc": "~2.2.10 || ^3.0.0" - }, - "peerDependenciesMeta": { - "@biomejs/biome": { - "optional": true - }, - "eslint": { - "optional": true - }, - "meow": { - "optional": true - }, - "optionator": { - "optional": true - }, - "stylelint": { - "optional": true - }, - "typescript": { - "optional": true - }, - "vls": { - "optional": true - }, - "vti": { - "optional": true - }, - "vue-tsc": { - "optional": true - } - } - }, - "node_modules/vite-plugin-checker/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/vite-plugin-checker/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/vite-plugin-compression2": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/vite-plugin-compression2/-/vite-plugin-compression2-1.4.0.tgz", - "integrity": "sha512-UEk0Bq1IkkwqbDLoLOHZ8WTmN1QbvR28fvNl2liB88/6SG1oLrTVkxfjqW3pdla/rKQ6QXn+pJpv3GBbl+k56g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.1.0", - "tar-mini": "^0.2.0" - }, - "peerDependencies": { - "vite": "^2.0.0||^3.0.0||^4.0.0||^5.0.0 ||^6.0.0" - } - }, - "node_modules/vite/node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/vitest": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", - "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/chai": "^5.2.2", - "@vitest/expect": "3.2.4", - "@vitest/mocker": "3.2.4", - "@vitest/pretty-format": "^3.2.4", - "@vitest/runner": "3.2.4", - "@vitest/snapshot": "3.2.4", - "@vitest/spy": "3.2.4", - "@vitest/utils": "3.2.4", - "chai": "^5.2.0", - "debug": "^4.4.1", - "expect-type": "^1.2.1", - "magic-string": "^0.30.17", - "pathe": "^2.0.3", - "picomatch": "^4.0.2", - "std-env": "^3.9.0", - "tinybench": "^2.9.0", - "tinyexec": "^0.3.2", - "tinyglobby": "^0.2.14", - "tinypool": "^1.1.1", - "tinyrainbow": "^2.0.0", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", - "vite-node": "3.2.4", - "why-is-node-running": "^2.3.0" - }, - "bin": { - "vitest": "vitest.mjs" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "@edge-runtime/vm": "*", - "@types/debug": "^4.1.12", - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "@vitest/browser": "3.2.4", - "@vitest/ui": "3.2.4", - "happy-dom": "*", - "jsdom": "*" - }, - "peerDependenciesMeta": { - "@edge-runtime/vm": { - "optional": true - }, - "@types/debug": { - "optional": true - }, - "@types/node": { - "optional": true - }, - "@vitest/browser": { - "optional": true - }, - "@vitest/ui": { - "optional": true - }, - "happy-dom": { - "optional": true - }, - "jsdom": { - "optional": true - } - } - }, - "node_modules/vitest/node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, - "node_modules/vscode-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", - "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/vue": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.25.tgz", - "integrity": "sha512-YLVdgv2K13WJ6n+kD5owehKtEXwdwXuj2TTyJMsO7pSeKw2bfRNZGjhB7YzrpbMYj5b5QsUebHpOqR3R3ziy/g==", - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.5.25", - "@vue/compiler-sfc": "3.5.25", - "@vue/runtime-dom": "3.5.25", - "@vue/server-renderer": "3.5.25", - "@vue/shared": "3.5.25" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/vue-eslint-parser": { - "version": "9.4.3", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", - "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.4", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^7.3.6" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "node_modules/vue-eslint-parser/node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/vue-i18n": { - "version": "9.14.5", - "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.14.5.tgz", - "integrity": "sha512-0jQ9Em3ymWngyiIkj0+c/k7WgaPO+TNzjKSNq9BvBQaKJECqn9cd9fL4tkDhB5G1QBskGl9YxxbDAhgbFtpe2g==", - "license": "MIT", - "dependencies": { - "@intlify/core-base": "9.14.5", - "@intlify/shared": "9.14.5", - "@vue/devtools-api": "^6.5.0" - }, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/kazupon" - }, - "peerDependencies": { - "vue": "^3.0.0" - } - }, - "node_modules/vue-lazyload": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/vue-lazyload/-/vue-lazyload-3.0.0.tgz", - "integrity": "sha512-h2keL/Rj550dLgesgOtXJS9qOiSMmuJNeVlfNAYV1/IYwOQYaWk5mFJlwRxmZDK9YC5gECcFLYYj7z1lKSf9ug==", - "license": "MIT" - }, - "node_modules/vue-router": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.4.tgz", - "integrity": "sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==", - "license": "MIT", - "dependencies": { - "@vue/devtools-api": "^6.6.4" - }, - "funding": { - "url": "https://github.com/sponsors/posva" - }, - "peerDependencies": { - "vue": "^3.5.0" - } - }, - "node_modules/vue-tsc": { - "version": "2.2.12", - "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.2.12.tgz", - "integrity": "sha512-P7OP77b2h/Pmk+lZdJ0YWs+5tJ6J2+uOQPo7tlBnY44QqQSPYvS0qVT4wqDJgwrZaLe47etJLLQRFia71GYITw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/typescript": "2.4.15", - "@vue/language-core": "2.2.12" - }, - "bin": { - "vue-tsc": "bin/vue-tsc.js" - }, - "peerDependencies": { - "typescript": ">=5.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", - "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "xml-name-validator": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/w3c-xmlserializer/node_modules/xml-name-validator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", - "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/watchpack": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", - "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", - "license": "MIT", - "peer": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - } - }, - "node_modules/webpack": { - "version": "5.104.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.0.tgz", - "integrity": "sha512-5DeICTX8BVgNp6afSPYXAFjskIgWGlygQH58bcozPOXgo2r/6xx39Y1+cULZ3gTxUYQP88jmwLj2anu4Xaq84g==", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.8", - "@types/json-schema": "^7.0.15", - "@webassemblyjs/ast": "^1.14.1", - "@webassemblyjs/wasm-edit": "^1.14.1", - "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.15.0", - "acorn-import-phases": "^1.0.3", - "browserslist": "^4.28.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.4", - "es-module-lexer": "^2.0.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.3.1", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^4.3.3", - "tapable": "^2.3.0", - "terser-webpack-plugin": "^5.3.16", - "watchpack": "^2.4.4", - "webpack-sources": "^3.3.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-sources": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", - "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-virtual-modules": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", - "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/webpack/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack/node_modules/es-module-lexer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", - "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", - "license": "MIT", - "peer": true - }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webpack/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "license": "BSD-2-Clause", - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/webpack/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT", - "peer": true - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", - "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/whatwg-encoding": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", - "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "iconv-lite": "0.6.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/whatwg-mimetype": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", - "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/whatwg-url": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", - "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tr46": "^5.1.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/why-is-node-running": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", - "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", - "dev": true, - "license": "MIT", - "dependencies": { - "siginfo": "^2.0.0", - "stackback": "0.0.2" - }, - "bin": { - "why-is-node-running": "cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12" - } - }, - "node_modules/xmlbuilder": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-10.1.1.tgz", - "integrity": "sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg==", - "license": "MIT", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true, - "license": "MIT" - }, - "node_modules/yaml": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", - "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", - "dev": true, - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - }, - "funding": { - "url": "https://github.com/sponsors/eemeli" - } - }, - "node_modules/yaml-eslint-parser": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.3.2.tgz", - "integrity": "sha512-odxVsHAkZYYglR30aPYRY4nUGJnoJ2y1ww2HDvZALo0BDETv9kWbi16J52eHs+PWRNmF4ub6nZqfVOeesOvntg==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.0.0", - "yaml": "^2.0.0" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/unmaintained/firefly-iii/APKBUILD b/user/firefly-iii/APKBUILD similarity index 98% rename from unmaintained/firefly-iii/APKBUILD rename to user/firefly-iii/APKBUILD index 08f146b..cc3f123 100644 --- a/unmaintained/firefly-iii/APKBUILD +++ b/user/firefly-iii/APKBUILD @@ -5,8 +5,7 @@ pkgname=firefly-iii pkgver=5.7.18 pkgrel=0 pkgdesc="PHP personal finances manager" -# FTBFS -#arch="noarch" +arch="noarch" url="https://github.com/firefly-iii/firefly-iii" license="AGPL-3.0-only" options="!check" # No testsuite diff --git a/user/forgejo-aneksajo/APKBUILD b/user/forgejo-aneksajo/APKBUILD new file mode 100644 index 0000000..ca50a59 --- /dev/null +++ b/user/forgejo-aneksajo/APKBUILD @@ -0,0 +1,112 @@ +# Contributor: Carlo Landmeter +# Contributor: 6543 <6543@obermui.de> +# Contributor: techknowlogick +# Contributor: Patrycja Rosa +# Maintainer: Antoine Martin (ayakael) +pkgname=forgejo-aneksajo +pkgver=8.0.1 +_gittag=v$pkgver-git-annex0 +pkgrel=0 +pkgdesc="Self-hosted Git service written in Go with git-annex support" +url="https://forgejo.org" +# riscv64: builds fail https://codeberg.org/forgejo/forgejo/issues/3025 +arch="all !riscv64" +license="MIT" +depends="git git-lfs gnupg" +makedepends="go nodejs npm" +checkdepends="bash openssh openssh-keygen sqlite tzdata" +install="$pkgname.pre-install" +pkgusers="forgejo" +pkggroups="www-data" +subpackages="$pkgname-openrc" +source="$pkgname-$_gittag.tar.gz::https://codeberg.org/matrss/forgejo-aneksajo/archive/$_gittag.tar.gz + $pkgname.initd + $pkgname.ini + " +builddir="$srcdir/forgejo-aneksajo" +options="!check net chmod-clean" # broken with GIT_CEILING + +# secfixes: +# 7.0.4-r0: +# - CVE-2024-24789 +# 7.0.3-r0: +# - CVE-2024-24788 +# 1.21.10.0-r0: +# - CVE-2023-45288 +# 1.21.3.0-r0: +# - CVE-2023-48795 + +export GOCACHE="${GOCACHE:-"$srcdir/go-cache"}" +export GOTMPDIR="${GOTMPDIR:-"$srcdir"}" +export GOMODCACHE="${GOMODCACHE:-"$srcdir/go"}" + +# Skip tests for archs that fail unrelated in CI +case "$CARCH" in +s390x|x86|armhf|armv7) options="$options !check" ;; +esac + +prepare() { + default_prepare + + npm ci +} + +build() { + # XXX: LARGEFILE64 + export CGO_CFLAGS="$CFLAGS -O2 -D_LARGEFILE64_SOURCE" + export TAGS="bindata sqlite sqlite_unlock_notify" + export GITEA_VERSION="$pkgver" + export EXTRA_GOFLAGS="$GOFLAGS" + export CGO_LDFLAGS="$LDFLAGS" + unset LDFLAGS + ## make FHS compliant + local setting="code.gitea.io/gitea/modules/setting" + export LDFLAGS="$LDFLAGS -X $setting.CustomConf=/etc/forgejo/app.ini" + export LDFLAGS="$LDFLAGS -X $setting.AppWorkPath=/var/lib/forgejo/" + + make -j1 build +} + +check() { + local home="$srcdir"/home + mkdir -p "$home" + install -d -m700 "$home"/.ssh + touch "$home"/.gitconfig + + env GITEA_ROOT="$home" HOME="$home" GITEA_WORK_DIR="$(pwd)" timeout -s ABRT 20m make -j1 test-sqlite + ## "make test" - modified (exclude broken tests) + ## 'code.gitea.io/gitea/modules/migrations': github hase rate limits! 403 API + local tests=$(go list ./... | grep -v /vendor/ | + grep -v 'code.gitea.io/gitea/modules/migrations' | + grep -v 'code.gitea.io/gitea/modules/charset' | + grep -v 'code.gitea.io/gitea/models/migrations' | + grep -v 'code.gitea.io/gitea/services/migrations' | + grep -v 'code.gitea.io/gitea/integrations') + env GITEA_CONF="$PWD/tests/sqlite.ini" GITEA_ROOT="$home" HOME="$home" GO111MODULE=on go test -mod=vendor -tags='sqlite sqlite_unlock_notify' $tests + +} + +package() { + for dir in $pkgname $pkgname/git $pkgname/data $pkgname/db $pkgname/custom; do + install -dm750 -o forgejo -g www-data \ + "$pkgdir"/var/lib/$dir + done + + install -dm755 -o forgejo -g www-data "$pkgdir"/var/log/forgejo + + # TODO: rename when upstream does + install -Dm755 -g www-data gitea "$pkgdir"/usr/bin/forgejo + + install -Dm644 -o forgejo -g www-data "$srcdir"/forgejo-aneksajo.ini \ + "$pkgdir"/etc/forgejo/app.ini + chown forgejo:www-data "$pkgdir"/etc/forgejo + + install -Dm755 "$srcdir"/forgejo-aneksajo.initd \ + "$pkgdir"/etc/init.d/forgejo +} + +sha512sums=" +d8e273d369c934eec7ff84795cd0d896cda53bc1a2d17f610dd8476ff92dc50c4a24c4598366ef8aac3be52ddef6630489043183085334376c30bc5d4d5f15c2 forgejo-aneksajo-v8.0.1-git-annex0.tar.gz +eb93a9f6c8f204de5c813f58727015f53f9feaab546589e016c60743131559f04fc1518f487b6d2a0e7fa8fab6d4a67cd0cd9713a7ccd9dec767a8c1ddebe129 forgejo-aneksajo.initd +b537b41b6b3a945274a6028800f39787b48c318425a37cf5d40ace0d1b305444fd07f17b4acafcd31a629bedd7d008b0bb3e30f82ffeb3d7e7e947bdbe0ff4f3 forgejo-aneksajo.ini +" diff --git a/user/forgejo-aneksajo/forgejo-aneksajo.ini b/user/forgejo-aneksajo/forgejo-aneksajo.ini new file mode 100644 index 0000000..3b46259 --- /dev/null +++ b/user/forgejo-aneksajo/forgejo-aneksajo.ini @@ -0,0 +1,26 @@ +# Configuration cheat sheet: https://forgejo.org/docs/latest/admin/config-cheat-sheet/ + +RUN_USER = forgejo +RUN_MODE = prod + +[repository] +ROOT = /var/lib/forgejo/git +SCRIPT_TYPE = sh + +[server] +STATIC_ROOT_PATH = /usr/share/webapps/forgejo +APP_DATA_PATH = /var/lib/forgejo/data +LFS_START_SERVER = true + +[database] +DB_TYPE = sqlite3 +PATH = /var/lib/forgejo/db/forgejo.db +SSL_MODE = disable + +[session] +PROVIDER = file + +[log] +ROOT_PATH = /var/log/forgejo +MODE = file +LEVEL = Info diff --git a/user/forgejo-aneksajo/forgejo-aneksajo.initd b/user/forgejo-aneksajo/forgejo-aneksajo.initd new file mode 100644 index 0000000..24dd085 --- /dev/null +++ b/user/forgejo-aneksajo/forgejo-aneksajo.initd @@ -0,0 +1,15 @@ +#!/sbin/openrc-run + +supervisor=supervise-daemon +name=forgejo +command="/usr/bin/forgejo" +command_user="${FORGEJO_USER:-forgejo}:www-data" +command_args="web --config '${FORGEJO_CONF:-/etc/forgejo/app.ini}'" +supervise_daemon_args="--env FORGEJO_WORK_DIR='${FORGEJO_WORK_DIR:-/var/lib/forgejo}' --chdir '${FORGEJO_WORK_DIR:-/var/lib/forgejo}' --stdout '${FORGEJO_LOG_FILE:-/var/log/forgejo/http.log}' --stderr '${FORGEJO_LOG_FILE:-/var/log/forgejo/http.log}'" +pidfile="/run/forgejo.pid" + +depend() { + use logger dns + need net + after firewall mysql postgresql +} diff --git a/user/forgejo-aneksajo/forgejo-aneksajo.pre-install b/user/forgejo-aneksajo/forgejo-aneksajo.pre-install new file mode 100644 index 0000000..c7e8b7b --- /dev/null +++ b/user/forgejo-aneksajo/forgejo-aneksajo.pre-install @@ -0,0 +1,7 @@ +#!/bin/sh + +addgroup -S -g 82 www-data 2>/dev/null +adduser -S -D -h /var/lib/forgejo -s /bin/sh -G www-data -g forgejo forgejo 2>/dev/null \ + && passwd -u forgejo 2>/dev/null + +exit 0 diff --git a/unmaintained/jellysub/APKBUILD b/user/jellysub/APKBUILD similarity index 100% rename from unmaintained/jellysub/APKBUILD rename to user/jellysub/APKBUILD diff --git a/unmaintained/jellysub/jellysub.conf b/user/jellysub/jellysub.conf similarity index 100% rename from unmaintained/jellysub/jellysub.conf rename to user/jellysub/jellysub.conf diff --git a/unmaintained/jellysub/jellysub.openrc b/user/jellysub/jellysub.openrc similarity index 100% rename from unmaintained/jellysub/jellysub.openrc rename to user/jellysub/jellysub.openrc diff --git a/user/kb/APKBUILD b/user/kb/APKBUILD index db1d678..a8f9c74 100644 --- a/user/kb/APKBUILD +++ b/user/kb/APKBUILD @@ -1,8 +1,9 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=kb -pkgver=0.1.8 -pkgrel=0 +_pkgreal=kb-manager +pkgver=0.1.7 +pkgrel=2 pkgdesc="A command line minimalist knowledge base manager" arch="noarch" url="https://github.com/gnebbia/kb" @@ -10,8 +11,9 @@ license="GPL-3.0-only" depends="py3-attrs py3-colored py3-gitpython py3-toml" makedepends="py3-setuptools py3-gpep517 py3-wheel" checkdepends="py3-pytest-cov" -source="$pkgname-$pkgver.tar.gz::https://github.com/gnebbia/kb/archive/refs/tags/v$pkgver.tar.gz" +source="https://files.pythonhosted.org/packages/source/k/kb-manager/kb-manager-$pkgver.tar.gz" subpackages="$pkgname-pyc" +builddir="$srcdir"/$_pkgreal-$pkgver build() { gpep517 build-wheel \ @@ -28,5 +30,5 @@ package() { .dist/*.whl } sha512sums=" -95fab9b5baa728795a6ce1e126fe90dd599528bc13f2274c5484dc43bdbca8fd5807e8ed4ec4e9ffa8382c5ec71662022d792e8ae941bd1629ed47c72d87d7a2 kb-0.1.8.tar.gz +f0dff69a5e95339ea22d0a9d1260473f7b0b6ace184936896e164172aecb77672e9e0a228159abc95e50f30de2ec9ca5185ffbd825dce87edfec267bc56c75dc kb-manager-0.1.7.tar.gz " diff --git a/user/koreader/APKBUILD b/user/koreader/APKBUILD deleted file mode 100644 index 73d1a63..0000000 --- a/user/koreader/APKBUILD +++ /dev/null @@ -1,82 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -pkgname=koreader -pkgver=2025.10 -pkgrel=0 -pkgdesc="An ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats" -# s390x|riscv64|ppc64le|loongarch64: FTBFS -# armhf|armv7|x86: Tests fail, segmentation fault -arch="x86_64 aarch64" -url="https://github.com/koreader/koreader/" -license="AGPL-3.0-only" -depends=" - bash - sdl2 - procps-ng - " -makedepends=" - autoconf - automake - cmake - coreutils - curl - diffutils - findutils - gettext - grep - libtool - linux-headers - meson - nasm - ninja-build - perl - pkgconf - wget - " -source=" - https://ayakael.net/api/packages/mirrors/generic/koreader/v$pkgver/koreader-v$pkgver.tar.gz - reader-lua-use-absolute-path-to-luajit.patch - " -subpackages="$pkgname-doc" -builddir="$srcdir"/$pkgname-v$pkgver - -# has vendored copies of system libraries -sonameprefix="$pkgname:" - -prepare() { - default_prepare - - # no need to test manually set version - rm "$builddir"/spec/unit/version_spec.lua -} - -build() { - # add ninja bin to path - export PATH="$PATH":/usr/lib/ninja-build/bin - - # default target is emulator build - make TARGET= KODEBUG= VERBOSE= -} - -check() { - KODEBUG= TARGET= VERBOSE= ./base/utils/fake_tty.py make --assume-old=base testfront -} - -package() { - install -Dm755 "$builddir"/platform/linux/koreader.sh "$pkgdir"/usr/bin/koreader - install -Dm644 "$builddir"/platform/linux/koreader.desktop -t "$pkgdir"/usr/share/applications/ - install -Dm644 "$builddir"/resources/koreader.png -t "$pkgdir"/usr/share/pixmaps/ - install -Dm644 "$builddir"/platform/linux/koreader.1 -t "$pkgdir"/usr/share/man/man1/ - - mkdir -p "$pkgdir"/usr/lib - cp -RL "$builddir"/koreader-emulator-*/koreader "$pkgdir"/usr/lib/koreader - - # delete debug files - find "$pkgdir" -name '*.dbg' -delete - - # version information - echo "v$pkgver" > "$pkgdir"/usr/lib/koreader/git-rev -} -sha512sums=" -3fbbe49ae6134abd810d9932cfb650d031100c95570c8eaa6d6e5d4c6a9a86916961b989696a7d97c149920d63853108905eea34f75f987e58f89e3a49d63948 koreader-v2025.10.tar.gz -76dd6f2ea6416b135b76d95f3c8150378f577ddd68d48312eabd6e12adaa111253dc83fc02add3ded07d3e6174fd5f4bd6c9f7b635ef27e3d760d5acced9e6fe reader-lua-use-absolute-path-to-luajit.patch -" diff --git a/user/koreader/reader-lua-use-absolute-path-to-luajit.patch b/user/koreader/reader-lua-use-absolute-path-to-luajit.patch deleted file mode 100644 index 3d25e3f..0000000 --- a/user/koreader/reader-lua-use-absolute-path-to-luajit.patch +++ /dev/null @@ -1,10 +0,0 @@ -diff --git a/reader.lua.orig b/reader.lua -index 6fe9489..c4cbb2b 100755 ---- a/reader.lua.orig -+++ b/reader.lua -@@ -1,4 +1,4 @@ --#!./luajit -+#!/usr/lib/koreader/luajit - - -- Enforce line-buffering for stdout (this is the default if it points to a tty, but we redirect to a file on most platforms). - io.stdout:setvbuf("line") diff --git a/user/linux-rm-headers/APKBUILD b/user/linux-rm-headers/APKBUILD new file mode 100644 index 0000000..0e34b2d --- /dev/null +++ b/user/linux-rm-headers/APKBUILD @@ -0,0 +1,40 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=linux-rm-headers +pkgver=5.4.70 +_rmver=1.3.4 +pkgrel=2 +pkgdesc="Linux kernel headers with reMarkable patches" +url=https://github.com/reMarkable/linux +provides="linux-headers=$pkgver-r$pkgrel" +makedepends="perl" +options="!check !dbg !strip !tracedeps" +builddir="$srcdir"/linux-RM1XX_${pkgver}_v$_rmver +source="https://github.com/reMarkable/linux/archive/refs/tags/RM1XX_${pkgver}_v$_rmver.tar.gz" +arch="noarch" +license="GPL-2.0" + +_carch=$CARCH +case "$CARCH" in + aarch64) _carch="arm64" ;; + arm*) _carch="arm" ;; +esac + +build() { + make headers ARCH="$_carch" +} + +package() { + mkdir -p "$pkgdir"/usr/ + cp -a usr/include/ "$pkgdir"/usr/include/ + + msg "purging non header files.." + find "$pkgdir"/usr/include/ ! -iname "*.h" -type f -exec rm -v {} \+ + + # provided by libdrm + rm -rf "$pkgdir"/usr/include/drm +} +sha512sums=" +0409c8443f5a705e8254858f966eed571b935f1be952f64c1d74b52a043d0638ba358370ca20f665d69b70aabe06f03e0bfa02ccd1a4a2a174d5b9579a10b44e RM1XX_5.4.70_v1.3.4.tar.gz +" diff --git a/user/linux-rm/APKBUILD b/user/linux-rm/APKBUILD new file mode 100644 index 0000000..864b2b5 --- /dev/null +++ b/user/linux-rm/APKBUILD @@ -0,0 +1,258 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=linux-rm +pkgver=5.4.70 +_rmver=1.3.4 +pkgrel=11 +pkgdesc="Linux kernel with reMarkable patches" +url=https://github.com/reMarkable/linux +depends="initramfs-generator linux-firmware-brcm linux-firmware-cypress" +_depends_dev="perl gmp-dev elfutils-dev bash mpc1-dev mpfr-dev" +makedepends="$_depends_dev sed installkernel bc linux-headers linux-firmware mawk + bison flex openssl-dev>3 diffutils pahole findutils xz lzop +" +options="!strip !check" +builddir="$srcdir"/linux-RM1XX_${pkgver}_v$_rmver +source=" + https://github.com/reMarkable/linux/archive/refs/tags/RM1XX_${pkgver}_v$_rmver.tar.gz + https://raw.githubusercontent.com/ichaozi/RemarkableFramebuffer/0f37dc8c06d340dc1af52ff2d4d6d5789ccf14bb/kernel-mxc-epdc-fb-reference/epdc_ES103CS1.fw + arm-replace-sun-style-flash-on-section-directive.patch + brcmfmac-disable-power-management.patch + brcmfmac-fix-suspend-resume-when-power-is-cut-off.patch + enable-automatic-partial-refreshing.patch + config-changes-rm.armv7 + config-changes-rm.armhf + " +arch="armv7" +license="GPL-2.0" +for _i in $source; do + case $_i in + config-*.$CARCH) + _f=${_i%."$CARCH"} + _f=${_f#config-changes-} + _flavors="$_flavors $_f" + [ "linux-$_f" != "$pkgname" ] && subpackages="$subpackages linux-$_f::$CTARGET_ARCH" + subpackages="$subpackages linux-$_f-dev:_dev:$CTARGET_ARCH" + ;; + esac +done + +_carch=$CARCH +case "$CARCH" in + aarch64) _carch="arm64" ;; + arm*) _carch="arm" ;; +esac + +# generate config from defconfig and apply local changes. +# config-changes-$flavor.$CARCH holds a list of = delimited +# config command and values used by kernel scripts/config script. +_genconfig() { + local flavor=$1 defconfig= + local subbuilddir="$srcdir"/build-$flavor + local defconfig= + case $flavor in + rm) defconfig=zero-gravitas_defconfig ;; + rm2) defconfig=zero-sugar_defconfig ;; + *) die "Unknown flavor: $flavor" ;; + esac + + cp "$builddir"/arch/$_carch/configs/$defconfig \ + "$subbuilddir"/.config + + while read -r line; do + # skip comments + case "$line" in + "#"*) continue;; + esac + local option=${line%%=*} str= + local cmd=$(echo $line | cut -d= -f2) + case "$cmd" in + y) cmd="enable";; + n) cmd="disable";; + m) cmd="module";; + '"'*) cmd="set-str"; str="${line#*=}";; + [0-9]*) cmd="set-val"; str="${line#*=}";; + *) die "Command $cmd not accepted" ;; + esac + msg "[$flavor] $cmd: $option $str" + "$builddir"/scripts/config \ + --file "$subbuilddir"/.config \ + --$cmd "$option" "${str//\"/}" + done < "$srcdir"/config-changes-$flavor.$CARCH +} + +# verify if options are set to correct value +_verifyconfig() { + local flavor=$1 + local subbuilddir="$srcdir"/build-$flavor + while read -r line; do + [ ${line:0:1} = "#" ] && continue + local option=${line%%=*} str= invert= + local cmd=$(echo $line | cut -d= -f2) + case "$cmd" in + enable) str="$option=y" ;; + disable) str="$option"; invert="-v" ;; + module) str="$option=m" ;; + set-val) str="$option=${line##*=}" ;; + set-str) str=${line##*=} + str="$option=\"${str//\"/}\"" ;; + esac + grep -q $invert "^$str" "$subbuilddir"/.config || \ + die "Config: $option not properly set!" + done < "$srcdir"/config-changes-$flavor.$CARCH +} + +prepare() { + default_prepare + + local flavor= + for flavor in $_flavors; do + local _builddir="$srcdir"/build-$flavor + mkdir -p "$_builddir" + echo "-$pkgrel-$flavor" > "$_builddir"/localversion-alpine + _genconfig $flavor + make -C "$builddir" \ + O="$_builddir" \ + ARCH="$_carch" \ + olddefconfig + _verifyconfig $flavor + done +} + +build() { + unset LDFLAGS + for i in $_flavors; do + cd "$srcdir"/build-$i + local _kver=$(make kernelversion) + if [ "$_kver" != "$pkgver" ]; then + error "Version in Makefile ($_kver) does not correspond with pkgver ($pkgver)" + return 1 + fi + + make ARCH="$_carch" CC="${CC:-gcc}" KLZOP="/usr/bin/lzop" \ + KBUILD_BUILD_VERSION="$((pkgrel + 1 ))-Alpine" + done +} + +_package() { + local _flavor="$1" _outdir="$2" + local _builddir="$srcdir"/build-$_flavor + local _abi_release="$(make -C "$_builddir" -s kernelrelease)" + + cd "$srcdir"/build-$_flavor + + mkdir -p "$_outdir"/boot "$_outdir"/lib/modules + + local _install="zinstall dtbs_install" + + cd "$srcdir"/build-$_flavor + # modules_install seems to regenerate a defect Modules.symvers. Work + # around it by backing it up and restore it after modules_install + cp Module.symvers Module.symvers.backup + + local INSTALL_DTBS_PATH="$_outdir"/boot + make -j1 modules_install $_install \ + ARCH="$_carch" \ + INSTALL_MOD_PATH="$_outdir" \ + INSTALL_MOD_STRIP=1 \ + INSTALL_PATH="$_outdir"/boot \ + INSTALL_DTBS_PATH="$INSTALL_DTBS_PATH" + cp Module.symvers.backup Module.symvers + + cp "$_builddir"/arch/arm/boot/zImage "$_outdir"/boot/zImage + rm "$_outdir"/boot/vmlinuz-$_flavor + + rm -f "$_outdir"/lib/modules/$_abi_release/build \ + "$_outdir"/lib/modules/$_abi_release/source + rm -rf "$_outdir"/lib/firmware + + install -D -m644 include/config/kernel.release \ + "$_outdir"/usr/share/kernel/$_flavor/kernel.release + + # install missing firmware + install -vDm644 "$srcdir"/epdc_ES103CS1.fw "$_outdir"/lib/firmware/imx/epdc/epdc_ES103CS1.fw +} + +# main flavor installs in $pkgdir +package() { + _package rm "$pkgdir" +} + +# subflavors install in $subpkgdir +rm2() { + depends="initramfs-generator linux-firmware-brcm linux-firmware-cypress" + _package rm2 "$subpkgdir" +} + +_dev() { + local _flavor=$(echo $subpkgname | sed -E 's/(^linux-|-dev$)//g') + local _builddir="$srcdir"/build-$_flavor + local _abi_release="$(make -C "$_builddir" -s kernelrelease)" + # copy the only the parts that we really need for build 3rd party + # kernel modules and install those as /usr/src/linux-headers, + # simlar to what ubuntu does + # + # this way you dont need to install the 300-400 kernel sources to + # build a tiny kernel module + # + pkgdesc="Headers and script for third party modules for $_flavor kernel" + depends="$_depends_dev" + local dir="$subpkgdir"/usr/src/linux-headers-$_abi_release + + # first we import config, run prepare to set up for building + # external modules, and create the scripts + mkdir -p "$dir" + cp "$_builddir"/.config "$dir"/.config + echo "-$pkgrel-$_flavor" > "$dir"/localversion-alpine + + make -j1 -C "$builddir" \ + O="$dir" \ + ARCH="$_carch" \ + AWK="${AWK:-mawk}" \ + syncconfig prepare modules_prepare scripts + + # remove the stuff that points to real sources. we want 3rd party + # modules to believe this is the soruces + rm "$dir"/Makefile "$dir"/source + + # scripts aren't being crossbuilt from some reason + if cross_compiling; then + for i in $(scanelf -R "$dir" | awk '{print $2}' | sed '1d'); do rm "$i"; done + fi + + # copy the needed stuff from real sources + # + # this is taken from ubuntu kernel build script + # http://kernel.ubuntu.com/git/ubuntu/ubuntu-zesty.git/tree/debian/rules.d/3-binary-indep.mk + cd "$builddir" + find . -path './include/*' -prune \ + -o -path './scripts/*' -prune -o -type f \ + \( -name 'Makefile*' -o -name 'Kconfig*' -o -name 'Kbuild*' -o \ + -name '*.sh' -o -name '*.pl' -o -name '*.lds' \) \ + -print | cpio -pdm "$dir" + + cp -a scripts include "$dir" + + # shellcheck disable=SC2046 + find $(find arch -name include -type d -print) -type f \ + | cpio -pdm "$dir" + + install -Dm644 "$_builddir"/Module.symvers \ + "$dir"/Module.symvers + + mkdir -p "$subpkgdir"/lib/modules/$_abi_release + ln -sf /usr/src/linux-headers-$_abi_release \ + "$subpkgdir"/lib/modules/$_abi_release/build +} + +sha512sums=" +0409c8443f5a705e8254858f966eed571b935f1be952f64c1d74b52a043d0638ba358370ca20f665d69b70aabe06f03e0bfa02ccd1a4a2a174d5b9579a10b44e RM1XX_5.4.70_v1.3.4.tar.gz +ad4bd6f332319aceee7a1c7b71b49439e8217621214b6249c7e20198360d02ea442f31edfc8e1af1b85ed71e6f97c1cb7decf7b0885c9d0293361eef47f218b2 epdc_ES103CS1.fw +f9114f8843317e1d26fbf1831182bc9c8d5907a92af6312c778f32be81414cfddfc3ced7b58375960232031d3295e8770b1a1e7466d2ace99e01bbcccd838543 arm-replace-sun-style-flash-on-section-directive.patch +c5fc4f2f70112cc66a91a2948f7fd4adcd7172a95191b4c862084c7b80093cfa696925aa9a825c41bddac7441ba153eb264b8146e52a4556a73349e6fd10e641 brcmfmac-disable-power-management.patch +27ec1bc1d916dbd2258192c1ed864eacbd2746b49caa554fbaf1124bac478bab0b729e7fabbab8705ae175bb098800f795d415f4de4964da921c1b802560b67a brcmfmac-fix-suspend-resume-when-power-is-cut-off.patch +0f47278c5bfafb939e46224fbf16f9491e3cc560ac128dcf430a1f6cf9064fb1c5bf5db1a3076c35d30c004aec525a7d6616a647564f197bb29c57701c1db982 enable-automatic-partial-refreshing.patch +9d01054ea7e4ee43836cc536bead5c1707b133790a4ef63e29feb10de4e0b290ba8829980b5340f56bee1e9ec0de66e1e4a55f03c0e6aacbce871a9d60e6ef2e config-changes-rm.armv7 +9d01054ea7e4ee43836cc536bead5c1707b133790a4ef63e29feb10de4e0b290ba8829980b5340f56bee1e9ec0de66e1e4a55f03c0e6aacbce871a9d60e6ef2e config-changes-rm.armhf +" diff --git a/user/linux-rm/arm-replace-sun-style-flash-on-section-directive.patch b/user/linux-rm/arm-replace-sun-style-flash-on-section-directive.patch new file mode 100644 index 0000000..29fef7f --- /dev/null +++ b/user/linux-rm/arm-replace-sun-style-flash-on-section-directive.patch @@ -0,0 +1,428 @@ +From 790756c7e0229dedc83bf058ac69633045b1000e Mon Sep 17 00:00:00 2001 +From: Nick Desaulniers +Date: Mon, 4 Nov 2019 19:31:45 +0100 +Subject: [PATCH] ARM: 8933/1: replace Sun/Solaris style flag on section + directive + +It looks like a section directive was using "Solaris style" to declare +the section flags. Replace this with the GNU style so that Clang's +integrated assembler can assemble this directive. + +The modified instances were identified via: +$ ag \.section | grep # + +Link: https://ftp.gnu.org/old-gnu/Manuals/gas-2.9.1/html_chapter/as_7.html#SEC119 +Link: https://github.com/ClangBuiltLinux/linux/issues/744 +Link: https://bugs.llvm.org/show_bug.cgi?id=43759 +Link: https://reviews.llvm.org/D69296 + +Acked-by: Nicolas Pitre +Reviewed-by: Ard Biesheuvel +Reviewed-by: Stefan Agner +Signed-off-by: Nick Desaulniers +Suggested-by: Fangrui Song +Suggested-by: Jian Cai +Suggested-by: Peter Smith +Signed-off-by: Russell King +--- + arch/arm/boot/bootp/init.S | 2 +- + arch/arm/boot/compressed/big-endian.S | 2 +- + arch/arm/boot/compressed/head.S | 2 +- + arch/arm/boot/compressed/piggy.S | 2 +- + arch/arm/mm/proc-arm1020.S | 2 +- + arch/arm/mm/proc-arm1020e.S | 2 +- + arch/arm/mm/proc-arm1022.S | 2 +- + arch/arm/mm/proc-arm1026.S | 2 +- + arch/arm/mm/proc-arm720.S | 2 +- + arch/arm/mm/proc-arm740.S | 2 +- + arch/arm/mm/proc-arm7tdmi.S | 2 +- + arch/arm/mm/proc-arm920.S | 2 +- + arch/arm/mm/proc-arm922.S | 2 +- + arch/arm/mm/proc-arm925.S | 2 +- + arch/arm/mm/proc-arm926.S | 2 +- + arch/arm/mm/proc-arm940.S | 2 +- + arch/arm/mm/proc-arm946.S | 2 +- + arch/arm/mm/proc-arm9tdmi.S | 2 +- + arch/arm/mm/proc-fa526.S | 2 +- + arch/arm/mm/proc-feroceon.S | 2 +- + arch/arm/mm/proc-mohawk.S | 2 +- + arch/arm/mm/proc-sa110.S | 2 +- + arch/arm/mm/proc-sa1100.S | 2 +- + arch/arm/mm/proc-v6.S | 2 +- + arch/arm/mm/proc-v7.S | 2 +- + arch/arm/mm/proc-v7m.S | 4 ++-- + arch/arm/mm/proc-xsc3.S | 2 +- + arch/arm/mm/proc-xscale.S | 2 +- + 28 files changed, 29 insertions(+), 29 deletions(-) + +diff --git a/arch/arm/boot/bootp/init.S b/arch/arm/boot/bootp/init.S +index 5c476bd2b4ce9c..b562da2f704088 100644 +--- a/arch/arm/boot/bootp/init.S ++++ b/arch/arm/boot/bootp/init.S +@@ -13,7 +13,7 @@ + * size immediately following the kernel, we could build this into + * a binary blob, and concatenate the zImage using the cat command. + */ +- .section .start,#alloc,#execinstr ++ .section .start, "ax" + .type _start, #function + .globl _start + +diff --git a/arch/arm/boot/compressed/big-endian.S b/arch/arm/boot/compressed/big-endian.S +index 88e2a88d324b25..0e092c36da2f27 100644 +--- a/arch/arm/boot/compressed/big-endian.S ++++ b/arch/arm/boot/compressed/big-endian.S +@@ -6,7 +6,7 @@ + * Author: Nicolas Pitre + */ + +- .section ".start", #alloc, #execinstr ++ .section ".start", "ax" + + mrc p15, 0, r0, c1, c0, 0 @ read control reg + orr r0, r0, #(1 << 7) @ enable big endian mode +diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S +index ae70754d003daa..ead21e5f2b8032 100644 +--- a/arch/arm/boot/compressed/head.S ++++ b/arch/arm/boot/compressed/head.S +@@ -140,7 +140,7 @@ + #endif + .endm + +- .section ".start", #alloc, #execinstr ++ .section ".start", "ax" + /* + * sort out different calling conventions + */ +diff --git a/arch/arm/boot/compressed/piggy.S b/arch/arm/boot/compressed/piggy.S +index 0284f84dcf3804..27577644ee721a 100644 +--- a/arch/arm/boot/compressed/piggy.S ++++ b/arch/arm/boot/compressed/piggy.S +@@ -1,5 +1,5 @@ + /* SPDX-License-Identifier: GPL-2.0 */ +- .section .piggydata,#alloc ++ .section .piggydata, "a" + .globl input_data + input_data: + .incbin "arch/arm/boot/compressed/piggy_data" +diff --git a/arch/arm/mm/proc-arm1020.S b/arch/arm/mm/proc-arm1020.S +index 4fa5371bc6624c..2785da387c9104 100644 +--- a/arch/arm/mm/proc-arm1020.S ++++ b/arch/arm/mm/proc-arm1020.S +@@ -491,7 +491,7 @@ cpu_arm1020_name: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __arm1020_proc_info,#object + __arm1020_proc_info: +diff --git a/arch/arm/mm/proc-arm1020e.S b/arch/arm/mm/proc-arm1020e.S +index 5d8a8339e09a4e..e9ea237ed78525 100644 +--- a/arch/arm/mm/proc-arm1020e.S ++++ b/arch/arm/mm/proc-arm1020e.S +@@ -449,7 +449,7 @@ arm1020e_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __arm1020e_proc_info,#object + __arm1020e_proc_info: +diff --git a/arch/arm/mm/proc-arm1022.S b/arch/arm/mm/proc-arm1022.S +index b3dd95c345e482..920c279e7879d8 100644 +--- a/arch/arm/mm/proc-arm1022.S ++++ b/arch/arm/mm/proc-arm1022.S +@@ -443,7 +443,7 @@ arm1022_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __arm1022_proc_info,#object + __arm1022_proc_info: +diff --git a/arch/arm/mm/proc-arm1026.S b/arch/arm/mm/proc-arm1026.S +index e927187157d7d5..0bdf25a95b107d 100644 +--- a/arch/arm/mm/proc-arm1026.S ++++ b/arch/arm/mm/proc-arm1026.S +@@ -437,7 +437,7 @@ arm1026_crval: + string cpu_arm1026_name, "ARM1026EJ-S" + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __arm1026_proc_info,#object + __arm1026_proc_info: +diff --git a/arch/arm/mm/proc-arm720.S b/arch/arm/mm/proc-arm720.S +index c99d24363f32ee..39361e196d61b8 100644 +--- a/arch/arm/mm/proc-arm720.S ++++ b/arch/arm/mm/proc-arm720.S +@@ -172,7 +172,7 @@ arm720_crval: + * See for a definition of this structure. + */ + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .macro arm720_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cpu_flush:req + .type __\name\()_proc_info,#object +diff --git a/arch/arm/mm/proc-arm740.S b/arch/arm/mm/proc-arm740.S +index 1b4a3838393fbd..1a94bbf6e53fc2 100644 +--- a/arch/arm/mm/proc-arm740.S ++++ b/arch/arm/mm/proc-arm740.S +@@ -128,7 +128,7 @@ __arm740_setup: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + .type __arm740_proc_info,#object + __arm740_proc_info: + .long 0x41807400 +diff --git a/arch/arm/mm/proc-arm7tdmi.S b/arch/arm/mm/proc-arm7tdmi.S +index 17a4687065c7f9..52b66cf0259e3f 100644 +--- a/arch/arm/mm/proc-arm7tdmi.S ++++ b/arch/arm/mm/proc-arm7tdmi.S +@@ -72,7 +72,7 @@ __arm7tdmi_setup: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .macro arm7tdmi_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, \ + extra_hwcaps=0 +diff --git a/arch/arm/mm/proc-arm920.S b/arch/arm/mm/proc-arm920.S +index 298c76b47749f9..31ac8acc34dc55 100644 +--- a/arch/arm/mm/proc-arm920.S ++++ b/arch/arm/mm/proc-arm920.S +@@ -434,7 +434,7 @@ arm920_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __arm920_proc_info,#object + __arm920_proc_info: +diff --git a/arch/arm/mm/proc-arm922.S b/arch/arm/mm/proc-arm922.S +index 824be3a0bc2382..ca2c7ca8af2146 100644 +--- a/arch/arm/mm/proc-arm922.S ++++ b/arch/arm/mm/proc-arm922.S +@@ -412,7 +412,7 @@ arm922_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __arm922_proc_info,#object + __arm922_proc_info: +diff --git a/arch/arm/mm/proc-arm925.S b/arch/arm/mm/proc-arm925.S +index d40cff8f102c2b..a381a0c9f1092e 100644 +--- a/arch/arm/mm/proc-arm925.S ++++ b/arch/arm/mm/proc-arm925.S +@@ -477,7 +477,7 @@ arm925_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .macro arm925_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cache + .type __\name\()_proc_info,#object +diff --git a/arch/arm/mm/proc-arm926.S b/arch/arm/mm/proc-arm926.S +index 4ef89e1d11276e..1ba253c2bce190 100644 +--- a/arch/arm/mm/proc-arm926.S ++++ b/arch/arm/mm/proc-arm926.S +@@ -460,7 +460,7 @@ arm926_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __arm926_proc_info,#object + __arm926_proc_info: +diff --git a/arch/arm/mm/proc-arm940.S b/arch/arm/mm/proc-arm940.S +index 1c26d991386d7d..4b8a00220cc976 100644 +--- a/arch/arm/mm/proc-arm940.S ++++ b/arch/arm/mm/proc-arm940.S +@@ -340,7 +340,7 @@ __arm940_setup: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __arm940_proc_info,#object + __arm940_proc_info: +diff --git a/arch/arm/mm/proc-arm946.S b/arch/arm/mm/proc-arm946.S +index 2dc1c75a4fd4a8..555becf9c758d1 100644 +--- a/arch/arm/mm/proc-arm946.S ++++ b/arch/arm/mm/proc-arm946.S +@@ -395,7 +395,7 @@ __arm946_setup: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + .type __arm946_proc_info,#object + __arm946_proc_info: + .long 0x41009460 +diff --git a/arch/arm/mm/proc-arm9tdmi.S b/arch/arm/mm/proc-arm9tdmi.S +index 913c06e590af51..ef517530130b03 100644 +--- a/arch/arm/mm/proc-arm9tdmi.S ++++ b/arch/arm/mm/proc-arm9tdmi.S +@@ -66,7 +66,7 @@ __arm9tdmi_setup: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .macro arm9tdmi_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req + .type __\name\()_proc_info, #object +diff --git a/arch/arm/mm/proc-fa526.S b/arch/arm/mm/proc-fa526.S +index 8120b6f4dbb83e..dddf833fe00078 100644 +--- a/arch/arm/mm/proc-fa526.S ++++ b/arch/arm/mm/proc-fa526.S +@@ -185,7 +185,7 @@ fa526_cr1_set: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __fa526_proc_info,#object + __fa526_proc_info: +diff --git a/arch/arm/mm/proc-feroceon.S b/arch/arm/mm/proc-feroceon.S +index bb6dc34d42a374..b12b76bc8d30ca 100644 +--- a/arch/arm/mm/proc-feroceon.S ++++ b/arch/arm/mm/proc-feroceon.S +@@ -571,7 +571,7 @@ feroceon_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .macro feroceon_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cache:req + .type __\name\()_proc_info,#object +diff --git a/arch/arm/mm/proc-mohawk.S b/arch/arm/mm/proc-mohawk.S +index f083085788857b..d47d6c5cee63a6 100644 +--- a/arch/arm/mm/proc-mohawk.S ++++ b/arch/arm/mm/proc-mohawk.S +@@ -416,7 +416,7 @@ mohawk_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __88sv331x_proc_info,#object + __88sv331x_proc_info: +diff --git a/arch/arm/mm/proc-sa110.S b/arch/arm/mm/proc-sa110.S +index d5bc5d70256399..baba503ba81669 100644 +--- a/arch/arm/mm/proc-sa110.S ++++ b/arch/arm/mm/proc-sa110.S +@@ -196,7 +196,7 @@ sa110_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __sa110_proc_info,#object + __sa110_proc_info: +diff --git a/arch/arm/mm/proc-sa1100.S b/arch/arm/mm/proc-sa1100.S +index be7b611c76c76a..75ebacc8e4e5cb 100644 +--- a/arch/arm/mm/proc-sa1100.S ++++ b/arch/arm/mm/proc-sa1100.S +@@ -239,7 +239,7 @@ sa1100_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .macro sa1100_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req + .type __\name\()_proc_info,#object +diff --git a/arch/arm/mm/proc-v6.S b/arch/arm/mm/proc-v6.S +index c1c85eb3484f31..1dd0d5ca27da8f 100644 +--- a/arch/arm/mm/proc-v6.S ++++ b/arch/arm/mm/proc-v6.S +@@ -261,7 +261,7 @@ v6_crval: + string cpu_elf_name, "v6" + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + /* + * Match any ARMv6 processor core. +diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S +index c4e8006a1a8cdd..48e0ef6f0dccfe 100644 +--- a/arch/arm/mm/proc-v7.S ++++ b/arch/arm/mm/proc-v7.S +@@ -644,7 +644,7 @@ __v7_setup_stack: + string cpu_elf_name, "v7" + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + /* + * Standard v7 proc info content +diff --git a/arch/arm/mm/proc-v7m.S b/arch/arm/mm/proc-v7m.S +index 1a49d503eafc80..84459c1d31b87f 100644 +--- a/arch/arm/mm/proc-v7m.S ++++ b/arch/arm/mm/proc-v7m.S +@@ -93,7 +93,7 @@ ENTRY(cpu_cm7_proc_fin) + ret lr + ENDPROC(cpu_cm7_proc_fin) + +- .section ".init.text", #alloc, #execinstr ++ .section ".init.text", "ax" + + __v7m_cm7_setup: + mov r8, #(V7M_SCB_CCR_DC | V7M_SCB_CCR_IC| V7M_SCB_CCR_BP) +@@ -177,7 +177,7 @@ ENDPROC(__v7m_setup) + string cpu_elf_name "v7m" + string cpu_v7m_name "ARMv7-M" + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .macro __v7m_proc name, initfunc, cache_fns = nop_cache_fns, hwcaps = 0, proc_fns = v7m_processor_functions + .long 0 /* proc_info_list.__cpu_mm_mmu_flags */ +diff --git a/arch/arm/mm/proc-xsc3.S b/arch/arm/mm/proc-xsc3.S +index 1ac0fbbe9f127f..42eaecc43cfeff 100644 +--- a/arch/arm/mm/proc-xsc3.S ++++ b/arch/arm/mm/proc-xsc3.S +@@ -496,7 +496,7 @@ xsc3_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .macro xsc3_proc_info name:req, cpu_val:req, cpu_mask:req + .type __\name\()_proc_info,#object +diff --git a/arch/arm/mm/proc-xscale.S b/arch/arm/mm/proc-xscale.S +index bdb2b7749b0393..18ac5a1f892258 100644 +--- a/arch/arm/mm/proc-xscale.S ++++ b/arch/arm/mm/proc-xscale.S +@@ -610,7 +610,7 @@ xscale_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .macro xscale_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cache + .type __\name\()_proc_info,#object diff --git a/user/linux-rm/brcmfmac-disable-power-management.patch b/user/linux-rm/brcmfmac-disable-power-management.patch new file mode 100644 index 0000000..2d48b3f --- /dev/null +++ b/user/linux-rm/brcmfmac-disable-power-management.patch @@ -0,0 +1,13 @@ +diff --git a/./drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c.orig b/./drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +index f507d82..6c06044 100644 +--- a/./drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c.orig ++++ b/./drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +@@ -2743,6 +2743,8 @@ brcmf_cfg80211_set_power_mgmt(struct wiphy *wiphy, struct net_device *ndev, + * preference in cfg struct to apply this to + * FW later while initializing the dongle + */ ++ pr_info("power management disabled\n"); ++ enabled = false; + cfg->pwr_save = enabled; + if (!check_vif_up(ifp->vif)) { + diff --git a/user/linux-rm/brcmfmac-fix-suspend-resume-when-power-is-cut-off.patch b/user/linux-rm/brcmfmac-fix-suspend-resume-when-power-is-cut-off.patch new file mode 100644 index 0000000..713c034 --- /dev/null +++ b/user/linux-rm/brcmfmac-fix-suspend-resume-when-power-is-cut-off.patch @@ -0,0 +1,221 @@ +From patchwork Wed Sep 25 13:44:57 2019 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Patchwork-Submitter: Adrian Ratiu +X-Patchwork-Id: 11160709 +X-Patchwork-Delegate: kvalo@adurom.com +Return-Path: +Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org + [172.30.200.123]) + by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E6264924 + for ; + Wed, 25 Sep 2019 13:45:07 +0000 (UTC) +Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) + by mail.kernel.org (Postfix) with ESMTP id CEE8421D7E + for ; + Wed, 25 Sep 2019 13:45:07 +0000 (UTC) +Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand + id S2406776AbfIYNo5 (ORCPT + ); + Wed, 25 Sep 2019 09:44:57 -0400 +Received: from bhuna.collabora.co.uk ([46.235.227.227]:57998 "EHLO + bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org + with ESMTP id S2406646AbfIYNo5 (ORCPT + ); + Wed, 25 Sep 2019 09:44:57 -0400 +Received: from [127.0.0.1] (localhost [127.0.0.1]) + (Authenticated sender: aratiu) + with ESMTPSA id 34818280400 +From: Adrian Ratiu +To: brcm80211-dev-list.pdl@broadcom.com +Cc: linux-wireless@vger.kernel.org, netdev@vger.kernel.org, + linux-kernel@vger.kernel.org, + Martyn Welch +Subject: [PATCH 1/2] brcmfmac: don't WARN when there are no requests +Date: Wed, 25 Sep 2019 16:44:57 +0300 +Message-Id: <20190925134458.1413790-1-adrian.ratiu@collabora.com> +X-Mailer: git-send-email 2.23.0 +MIME-Version: 1.0 +Sender: linux-wireless-owner@vger.kernel.org +Precedence: bulk +List-ID: +X-Mailing-List: linux-wireless@vger.kernel.org + +When n_reqs == 0 there is nothing to do so it doesn't make sense to +search for requests and issue a warning because none is found. + +Signed-off-by: Martyn Welch +Signed-off-by: Adrian Ratiu +--- + drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c +index 14e530601ef3..fabfbb0b40b0 100644 +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c +@@ -57,6 +57,10 @@ static int brcmf_pno_remove_request(struct brcmf_pno_info *pi, u64 reqid) + + mutex_lock(&pi->req_lock); + ++ /* Nothing to do if we have no requests */ ++ if (pi->n_reqs == 0) ++ goto done; ++ + /* find request */ + for (i = 0; i < pi->n_reqs; i++) { + if (pi->reqs[i]->reqid == reqid) + +From patchwork Wed Sep 25 13:44:58 2019 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Patchwork-Submitter: Adrian Ratiu +X-Patchwork-Id: 11160707 +X-Patchwork-Delegate: kvalo@adurom.com +Return-Path: +Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org + [172.30.200.123]) + by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 47A3C14DB + for ; + Wed, 25 Sep 2019 13:45:03 +0000 (UTC) +Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) + by mail.kernel.org (Postfix) with ESMTP id 2F3CC21D7F + for ; + Wed, 25 Sep 2019 13:45:03 +0000 (UTC) +Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand + id S2406832AbfIYNo6 (ORCPT + ); + Wed, 25 Sep 2019 09:44:58 -0400 +Received: from bhuna.collabora.co.uk ([46.235.227.227]:58004 "EHLO + bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org + with ESMTP id S2406650AbfIYNo5 (ORCPT + ); + Wed, 25 Sep 2019 09:44:57 -0400 +Received: from [127.0.0.1] (localhost [127.0.0.1]) + (Authenticated sender: aratiu) + with ESMTPSA id 8EFA628BCCF +From: Adrian Ratiu +To: brcm80211-dev-list.pdl@broadcom.com +Cc: linux-wireless@vger.kernel.org, netdev@vger.kernel.org, + linux-kernel@vger.kernel.org, + Gustavo Padovan +Subject: [PATCH 2/2] brcmfmac: fix suspend/resume when power is cut off +Date: Wed, 25 Sep 2019 16:44:58 +0300 +Message-Id: <20190925134458.1413790-2-adrian.ratiu@collabora.com> +X-Mailer: git-send-email 2.23.0 +In-Reply-To: <20190925134458.1413790-1-adrian.ratiu@collabora.com> +References: <20190925134458.1413790-1-adrian.ratiu@collabora.com> +MIME-Version: 1.0 +Sender: linux-wireless-owner@vger.kernel.org +Precedence: bulk +List-ID: +X-Mailing-List: linux-wireless@vger.kernel.org + +brcmfmac assumed the wifi device always remains powered on and thus +hardcoded the MMC_PM_KEEP_POWER flag expecting the wifi device to +remain on even during suspend/resume cycles. + +This is not always the case, some appliances cut power to everything +connected via SDIO for efficiency reasons and this leads to wifi not +being usable after coming out of suspend because the device was not +correctly reinitialized. + +So we check for the keep_power capability and if it's not present then +we remove the device and probe it again during resume to mirror what's +happening in hardware and ensure correct reinitialization in the case +when MMC_PM_KEEP_POWER is not supported. + +Suggested-by: Gustavo Padovan +Signed-off-by: Adrian Ratiu +--- + .../broadcom/brcm80211/brcmfmac/bcmsdh.c | 53 ++++++++++++++----- + 1 file changed, 39 insertions(+), 14 deletions(-) + +diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c +index 987731b..dac4685 100644 +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c +@@ -1136,7 +1136,8 @@ static int brcmf_ops_sdio_suspend(struct device *dev) + struct sdio_func *func; + struct brcmf_bus *bus_if; + struct brcmf_sdio_dev *sdiodev; +- mmc_pm_flag_t sdio_flags; ++ mmc_pm_flag_t pm_caps, sdio_flags; ++ int ret = 0; + struct brcmf_cfg80211_info *config; + int retry = BRCMF_PM_WAIT_MAXRETRY; + +@@ -1159,19 +1160,33 @@ static int brcmf_ops_sdio_suspend(struct device *dev) + + sdiodev = bus_if->bus_priv.sdio; + +- brcmf_sdiod_freezer_on(sdiodev); +- brcmf_sdio_wd_timer(sdiodev->bus, 0); +- +- sdio_flags = MMC_PM_KEEP_POWER; +- if (sdiodev->wowl_enabled) { +- if (sdiodev->settings->bus.sdio.oob_irq_supported) +- enable_irq_wake(sdiodev->settings->bus.sdio.oob_irq_nr); +- else +- sdio_flags |= MMC_PM_WAKE_SDIO_IRQ; ++ pm_caps = sdio_get_host_pm_caps(func); ++ ++ if (pm_caps & MMC_PM_KEEP_POWER) { ++ /* preserve card power during suspend */ ++ brcmf_sdiod_freezer_on(sdiodev); ++ brcmf_sdio_wd_timer(sdiodev->bus, 0); ++ ++ sdio_flags = MMC_PM_KEEP_POWER; ++ if (sdiodev->wowl_enabled) { ++ if (sdiodev->settings->bus.sdio.oob_irq_supported) ++ enable_irq_wake(sdiodev->settings->bus.sdio.oob_irq_nr); ++ else ++ sdio_flags |= MMC_PM_WAKE_SDIO_IRQ; ++ } ++ ++ if (sdio_set_host_pm_flags(sdiodev->func1, sdio_flags)) ++ brcmf_err("Failed to set pm_flags %x\n", sdio_flags); ++ ++ } else { ++ /* power will be cut so remove device, probe again in resume */ ++ brcmf_sdiod_intr_unregister(sdiodev); ++ ret = brcmf_sdiod_remove(sdiodev); ++ if (ret) ++ brcmf_err("Failed to remove device on suspend\n"); + } +- if (sdio_set_host_pm_flags(sdiodev->func1, sdio_flags)) +- brcmf_err("Failed to set pm_flags %x\n", sdio_flags); +- return 0; ++ ++ return ret; + } + + static int brcmf_ops_sdio_resume(struct device *dev) +@@ -1179,13 +1194,23 @@ static int brcmf_ops_sdio_resume(struct device *dev) + struct brcmf_bus *bus_if = dev_get_drvdata(dev); + struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio; + struct sdio_func *func = container_of(dev, struct sdio_func, dev); ++ mmc_pm_flag_t pm_caps = sdio_get_host_pm_caps(func); ++ int ret = 0; + + brcmf_dbg(SDIO, "Enter: F%d\n", func->num); + if (func->num != 2) + return 0; + +- brcmf_sdiod_freezer_off(sdiodev); +- return 0; ++ if (!(pm_caps & MMC_PM_KEEP_POWER)) { ++ /* bus was powered off and device removed, probe again */ ++ ret = brcmf_sdiod_probe(sdiodev); ++ if (ret) ++ brcmf_err("Failed to probe device on resume\n"); ++ } else { ++ brcmf_sdiod_freezer_off(sdiodev); ++ } ++ ++ return ret; + } + + static const struct dev_pm_ops brcmf_sdio_pm_ops = { diff --git a/user/linux-rm/config-changes-rm.armhf b/user/linux-rm/config-changes-rm.armhf new file mode 120000 index 0000000..6c4e6a5 --- /dev/null +++ b/user/linux-rm/config-changes-rm.armhf @@ -0,0 +1 @@ +config-changes-rm.armv7 \ No newline at end of file diff --git a/user/linux-rm/config-changes-rm.armv7 b/user/linux-rm/config-changes-rm.armv7 new file mode 100644 index 0000000..fa272a1 --- /dev/null +++ b/user/linux-rm/config-changes-rm.armv7 @@ -0,0 +1,62 @@ +# format is config=command +# where command can be one of: +# y,n,m,", +# from remarkable-microsd project +# see http://www.davisr.me/projects/remarkable-microsd/ +CONFIG_RTL_CARDS=y +CONFIG_BATTERY_BQ27XXX=y +CONFIG_BATTERY_BQ27XXX_I2C=y +CONFIG_CRYPTO_AEAD=y +CONFIG_CRYPTO_GF128MUL=y +CONFIG_CRYPTO_NULL=y +CONFIG_CRYPTO_SEQIV=y +CONFIG_CRYPTO_CTR=y +CONFIG_CRYPTO_GHASH=y +# serial through USB +CONFIG_USB_ACM=y +CONFIG_USB_F_ACM=y +CONFIG_USB_U_SERIAL=y +CONFIG_USB_CDC_COMPOSITE=y +# console through serial +CONFIG_USB_G_SERIAL=y +CONFIG_U_SERIAL_CONSOLE=y +# wifi module doesn't load early enough for lack of initramfs +CONFIG_CFG80211=m +CONFIG_MAC80211=m +CONFIG_BRCMFMAC=m +CONFIG_BRCMUTIL=m +# iwd requires these modules +CONFIG_CRYPTO_AES=y +CONFIG_CRYPTO_USER_API_HASH=y +CONFIG_CRYPTO_USER_API_SKCIPHER=y +CONFIG_KEY_DH_OPERATIONS=y +CONFIG_CRYPTO_ECB=y +CONFIG_CRYPTO_MD4=y +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_CBC=y +CONFIG_CRYPTO_SHA256=y +CONFIG_CRYPTO_DES=y +CONFIG_CRYPTO_CMAC=y +CONFIG_CRYPTO_HMAC=y +CONFIG_CRYPTO_SHA512=y +CONFIG_CRYPTO_SHA1=y +# other +LOCALVERSION="" +CONFIG_DEFAULT_HOSTNAME="remarkable" +CONFIG_MODULE_UNLOAD=y +# f2fs support +CONFIG_F2FS_FS=y +CONFIG_F2FS_STAT_FS=y +CONFIG_F2FS_FS_XATTR=y +CONFIG_F2FS_FS_POSIX_ACL=y +CONFIG_F2FS_FS_SECURITY=y +CONFIG_F2FS_CHECK_FS=n +CONFIG_F2FS_IO_TRACE=n +CONFIG_F2FS_FAULT_INJECTION=n +CONFIG_F2FS_FS_COMPRESSION=y +CONFIG_F2FS_FS_LZO=y +CONFIG_F2FS_FS_LZ4=y +CONFIG_F2FS_FS_ZSTD=y +CONFIG_F2FS_FS_LZORLE=y +# disabled as breaks build +CONFIG_MXC_GPU_VIV=n diff --git a/user/linux-rm/config-changes-rm2.armhf b/user/linux-rm/config-changes-rm2.armhf new file mode 120000 index 0000000..6c4e6a5 --- /dev/null +++ b/user/linux-rm/config-changes-rm2.armhf @@ -0,0 +1 @@ +config-changes-rm.armv7 \ No newline at end of file diff --git a/user/linux-rm/config-changes-rm2.armv7 b/user/linux-rm/config-changes-rm2.armv7 new file mode 120000 index 0000000..6c4e6a5 --- /dev/null +++ b/user/linux-rm/config-changes-rm2.armv7 @@ -0,0 +1 @@ +config-changes-rm.armv7 \ No newline at end of file diff --git a/user/linux-rm/enable-automatic-partial-refreshing.patch b/user/linux-rm/enable-automatic-partial-refreshing.patch new file mode 100644 index 0000000..e78bc13 --- /dev/null +++ b/user/linux-rm/enable-automatic-partial-refreshing.patch @@ -0,0 +1,26 @@ +diff --git a/drivers/video/fbdev/mxc/mxc_epdc_fb.c.orig b/drivers/video/fbdev/mxc/mxc_epdc_fb.c +index 5c7d87d..5c31379 100644 +--- a/drivers/video/fbdev/mxc/mxc_epdc_fb.c.orig ++++ b/drivers/video/fbdev/mxc/mxc_epdc_fb.c +@@ -3489,10 +3489,10 @@ static void mxc_epdc_fb_update_pages(struct mxc_epdc_fb_data *fb_data, + update.update_region.top = y1; + update.update_region.height = y2 - y1; + update.waveform_mode = WAVEFORM_MODE_AUTO; +- update.update_mode = UPDATE_MODE_FULL; ++ update.update_mode = UPDATE_MODE_PARTIAL; + update.update_marker = 0; + update.temp = TEMP_USE_AMBIENT; +- update.flags = 0; ++ update.flags = EPDC_FLAG_USE_REGAL; + + mxc_epdc_fb_send_update(&update, &fb_data->info); + } +@@ -3687,7 +3687,7 @@ static struct fb_ops mxc_epdc_fb_ops = { + }; + + static struct fb_deferred_io mxc_epdc_fb_defio = { +- .delay = HZ, ++ .delay = HZ / 30, + .deferred_io = mxc_epdc_fb_deferred_io, + }; + diff --git a/user/linux-rm/enable-sdhc1.patch b/user/linux-rm/enable-sdhc1.patch new file mode 100644 index 0000000..31c2b72 --- /dev/null +++ b/user/linux-rm/enable-sdhc1.patch @@ -0,0 +1,790 @@ +diff --git a/arch/arm/boot/dts/zero-gravitas.dts b/arch/arm/boot/dts/zero-gravitas.dts +index f51edfdedf8a..947f43c3434c 100644 +--- a/arch/arm/boot/dts/zero-gravitas.dts ++++ b/arch/arm/boot/dts/zero-gravitas.dts +@@ -1,6 +1,783 @@ +-#include "zero-gravitas-factory.dts" ++/* ++ * Copyright (C) 2013 Freescale Semiconductor, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++/dts-v1/; ++ ++#include ++#include ++#include "imx6sl.dtsi" ++#include "zero-gravitas-padctl.h" ++ ++/ { ++ model = "reMarkable 1.0"; ++ compatible = "remarkable,zero-gravitas", "fsl,imx6sl"; ++ ++ memory { ++ reg = <0x80000000 0x20000000>; ++ }; ++ ++ wifi_pwrseq: wifi_pwrseq { ++ compatible = "mmc-pwrseq-simple"; ++ reset-gpios = <&gpio3 30 GPIO_ACTIVE_LOW>, ++ <&gpio4 0 GPIO_ACTIVE_LOW>; ++ clocks = <&clks IMX6SL_CLK_OSC>; ++ clock-names = "ext_clock"; ++ }; ++ ++ regulators { ++ compatible = "simple-bus"; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ reg_usb_otg1_vbus: regulator@0 { ++ compatible = "regulator-fixed"; ++ reg = <0>; ++ regulator-name = "usb_otg1_vbus"; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ gpio = <&gpio4 15 0>; ++ enable-active-high; ++ vin-supply = <&swbst_reg>; ++ }; ++ ++ charger_regulator: regulator@1 { ++ reg = <1>; ++ compatible = "regulator-fixed"; ++ regulator-name = "charger-regulator"; ++ regulator-min-microamp = <5000000>; ++ regulator-max-microamp = <5000000>; ++ gpios = <&gpio3 27 GPIO_ACTIVE_LOW>; ++ enable-active-high; /* Don't invert twice */ ++ regulator-boot-on; ++ status = "disabled"; ++ }; ++ }; ++ ++ wacom_reset: wacom-reset { ++ compatible = "gpio-reset"; ++ reset-gpios = <&gpio4 4 1>; ++ reset-delay-us = <100000>; ++ #reset-cells = <0>; ++ }; ++ ++ gpio-keys { ++ compatible = "gpio-keys"; ++ pinctrl-0 = <&pinctrl_keys>; ++ pinctrl-names = "default"; ++ status = "okay"; ++ ++ button_0 { ++ label = "Power"; ++ gpios = <&gpio4 9 GPIO_ACTIVE_LOW>; ++ linux,code = ; ++ gpio-key,wakeup; ++ debounce-interval = <10>; ++ }; ++ ++ button_1 { ++ label = "Left"; ++ gpios = <&gpio3 24 GPIO_ACTIVE_LOW>; ++ linux,code = ; ++ gpio-key,wakeup; ++ debounce-interval = <5>; ++ }; ++ ++ button_2 { ++ label = "Home"; ++ gpios = <&gpio3 26 GPIO_ACTIVE_LOW>; ++ linux,code = ; ++ gpio-key,wakeup; ++ debounce-interval = <5>; ++ }; ++ button_3 { ++ label = "Right"; ++ gpios = <&gpio3 28 GPIO_ACTIVE_LOW>; ++ linux,code = ; ++ gpio-key,wakeup; ++ debounce-interval = <5>; ++ }; ++ button_4 { ++ label = "LowPower"; ++ gpios = <&gpio3 31 GPIO_ACTIVE_LOW>; ++ linux,code = ; ++ gpio-key,wakeup; ++ debounce-interval = <100>; ++ }; ++ }; ++ ++ usb_charger: usb_charger { ++ compatible = "gpio-charger"; ++ gpios = <&gpio4 1 0>; ++ status = "disabled"; ++ }; ++}; ++ ++&epdc { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_epdc_0>; ++ VCOM-supply = <&VCOM_reg>; ++ DISPLAY-supply = <&DISPLAY_reg>; ++ TMST-supply = <&TMST_reg>; ++ status = "okay"; ++}; ++ ++&gpc { ++ fsl,ldo-bypass = <1>; ++}; ++ ++®_arm { ++ vin-supply = <&sw1a_reg>; ++ regulator-allow-bypass; ++}; ++ ++®_soc { ++ vin-supply = <&sw1c_reg>; ++ regulator-allow-bypass; ++}; ++ ++®_pu { ++ vin-supply = <&sw1c_reg>; ++ regulator-allow-bypass; ++}; ++ ++&i2c1 { ++ clock-frequency = <100000>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_i2c1>; ++ status = "okay"; ++ ++ battery: bq27441@55 { ++ reg = <0x55>; ++ compatible = "ti,bq27441"; ++ /*power-supplies = <&usb_charger>;*/ ++ /*charger-supply = <&charger_regulator>;*/ ++ /*interrupt-parent = <&gpio3>; ++ interrupts = <31 IRQ_TYPE_LEVEL_HIGH>;*/ ++ ti,resistor-sense = <10>; ++ }; ++ ++ pmic: pfuze100@8 { ++ compatible = "fsl,pfuze100"; ++ reg = <0x08>; ++ ++ regulators { ++ sw1a_reg: sw1ab { ++ regulator-min-microvolt = <300000>; ++ regulator-max-microvolt = <1875000>; ++ regulator-boot-on; ++ regulator-always-on; ++ regulator-ramp-delay = <6250>; ++ }; ++ ++ sw1c_reg: sw1c { ++ regulator-min-microvolt = <300000>; ++ regulator-max-microvolt = <1875000>; ++ regulator-boot-on; ++ regulator-always-on; ++ regulator-ramp-delay = <6250>; ++ }; ++ ++ sw2_reg: sw2 { ++ regulator-min-microvolt = <400000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ sw3a_reg: sw3a { ++ regulator-min-microvolt = <400000>; ++ regulator-max-microvolt = <1975000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ sw3b_reg: sw3b { ++ regulator-min-microvolt = <400000>; ++ regulator-max-microvolt = <1975000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ sw4_reg: sw4 { ++ regulator-min-microvolt = <800000>; ++ regulator-max-microvolt = <3300000>; ++ }; ++ ++ swbst_reg: swbst { ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5150000>; ++ }; ++ ++ snvs_reg: vsnvs { ++ regulator-min-microvolt = <1000000>; ++ regulator-max-microvolt = <3000000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ vref_reg: vrefddr { ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ vgen1_reg: vgen1 { ++ regulator-min-microvolt = <800000>; ++ regulator-max-microvolt = <1550000>; ++ regulator-always-on; ++ }; ++ ++ vgen2_reg: vgen2 { ++ regulator-min-microvolt = <800000>; ++ regulator-max-microvolt = <1550000>; ++ }; ++ ++ vgen3_reg: vgen3 { ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <3300000>; ++ }; ++ ++ vgen4_reg: vgen4 { ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-always-on; ++ }; ++ ++ vgen5_reg: vgen5 { ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-always-on; ++ }; ++ ++ vgen6_reg: vgen6 { ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-always-on; ++ }; ++ }; ++ }; ++ ++ max17135@48 { ++ compatible = "maxim,max17135"; ++ reg = <0x48>; ++ pass_num = <2>; ++ gvee_pwrup = <0>; /* ms */ ++ vneg_pwrup = <3>; ++ vpos_pwrup = <6>; ++ gvdd_pwrup = <3>; ++ ++ gvdd_pwrdn = <1>; ++ vpos_pwrdn = <2>; ++ vneg_pwrdn = <6>; ++ gvee_pwrdn = <50>; ++ /* These are only for passnum 1, we use i2c */ ++ gpio_pmic_pwrgood = <&gpio2 13 0>; ++ gpio_pmic_vcom_ctrl = <&gpio2 3 0>; ++ gpio_pmic_wakeup = <&gpio2 14 0>; ++ gpio_pmic_v3p3 = <&gpio2 7 0>; ++ gpio_pmic_intr = <&gpio2 12 0>; ++ ++ regulators { ++ DISPLAY_reg: DISPLAY { ++ regulator-name = "DISPLAY"; ++ }; ++ ++ GVDD_reg: GVDD { ++ /* 20v */ ++ regulator-name = "GVDD"; ++ }; ++ ++ GVEE_reg: GVEE { ++ /* -22v */ ++ regulator-name = "GVEE"; ++ }; ++ ++ HVINN_reg: HVINN { ++ /* -22v */ ++ regulator-name = "HVINN"; ++ }; ++ ++ HVINP_reg: HVINP { ++ /* 20v */ ++ regulator-name = "HVINP"; ++ }; ++ ++ VCOM_reg: VCOM { ++ regulator-name = "VCOM"; ++ /* Real max value: -500000 */ ++ regulator-max-microvolt = <4325000>; ++ /* Real min value: -4325000 */ ++ regulator-min-microvolt = <500000>; ++ }; ++ ++ VNEG_reg: VNEG { ++ /* -15v */ ++ regulator-name = "VNEG"; ++ }; ++ ++ VPOS_reg: VPOS { ++ /* 15v */ ++ regulator-name = "VPOS"; ++ }; ++ ++ TMST_reg: TMST { ++ regulator-name = "TMST"; ++ /* 2's-compliment, -127 */ ++ regulator-min-microvolt = <0xffffff81>; ++ /* 2's-compliment, +127 */ ++ regulator-max-microvolt = <0x0000007f>; ++ }; ++ }; ++ }; ++ ++}; ++ ++&i2c2 { ++ clock-frequency = <100000>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_i2c2>; ++ status = "okay"; ++ ++ digitizer: wacom-i2c@9 { ++ compatible = "wacom,wacom-i2c"; ++ reg = <0x09>; ++ interrupt-parent = <&gpio2>; ++ interrupts = <10 2>; ++ resets = <&wacom_reset>; ++ }; ++}; ++ ++&i2c3 { ++ clock-frequency = <100000>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_i2c3>; ++ status = "okay"; ++ ++ tsc@24 { ++ compatible = "cy,cyttsp5_i2c_adapter"; ++ reg = <0x24>; ++ interrupt-parent = <&gpio4>; ++ interrupts = <3 2>; ++ cy,adapter_id = "cyttsp5_i2c_adapter"; ++ status = "okay"; ++ ++ cy,core { ++ cy,name = "cyttsp5_core"; ++ ++ cy,irq_gpio = <&gpio4 3 0>; ++ cy,rst_gpio = <&gpio4 5 0>; ++ cy,hid_desc_register = <1>; ++ /* CY_CORE_FLAG_RESTORE_PARAMETERS */ ++ cy,flags = <4>; ++ /* CY_CORE_EWG_NONE */ ++ cy,easy_wakeup_gesture = <0>; ++ cy,btn_keys = <172 /* KEY_HOMEPAGE */ ++ /* previously was KEY_HOME, new Android versions use KEY_HOMEPAGE */ ++ 139 /* KEY_MENU */ ++ 158 /* KEY_BACK */ ++ 217 /* KEY_SEARCH */ ++ 114 /* KEY_VOLUMEDOWN */ ++ 115 /* KEY_VOLUMEUP */ ++ 212 /* KEY_CAMERA */ ++ 116>; /* KEY_POWER */ ++ cy,btn_keys-tag = <0>; ++ ++ cy,mt { ++ cy,name = "cyttsp5_mt"; ++ ++ cy,inp_dev_name = "cyttsp5_mt"; ++ cy,flags = <0>; ++ cy,abs = ++ /* ABS_MT_POSITION_X, CY_ABS_MIN_X, CY_ABS_MAX_X, 0, 0 */ ++ <0x35 0 880 0 0 ++ /* ABS_MT_POSITION_Y, CY_ABS_MIN_Y, CY_ABS_MAX_Y, 0, 0 */ ++ 0x36 0 1280 0 0 ++ /* ABS_MT_PRESSURE, CY_ABS_MIN_P, CY_ABS_MAX_P, 0, 0 */ ++ 0x3a 0 255 0 0 ++ /* CY_IGNORE_VALUE, CY_ABS_MIN_W, CY_ABS_MAX_W, 0, 0 */ ++ 0xffff 0 255 0 0 ++ /* ABS_MT_TRACKING_ID, CY_ABS_MIN_T, CY_ABS_MAX_T, 0, 0 */ ++ 0x39 0 15 0 0 ++ /* ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0 */ ++ 0x30 0 255 0 0 ++ /* ABS_MT_TOUCH_MINOR, 0, 255, 0, 0 */ ++ 0x31 0 255 0 0 ++ /* ABS_MT_ORIENTATION, -127, 127, 0, 0 */ ++ 0x34 0xffffff81 127 0 0 ++ /* ABS_MT_TOOL_TYPE, 0, MT_TOOL_MAX, 0, 0 */ ++ 0x37 0 1 0 0 ++ /* ABS_DISTANCE, 0, 255, 0, 0 */ ++ 0x19 0 255 0 0>; ++ ++ cy,vkeys_x = <720>; ++ cy,vkeys_y = <1280>; ++ ++ cy,virtual_keys = /* KeyCode CenterX CenterY Width Height */ ++ /* KEY_BACK */ ++ <158 1360 90 160 180 ++ /* KEY_MENU */ ++ 139 1360 270 160 180 ++ /* KEY_HOMEPAGE */ ++ 172 1360 450 160 180 ++ /* KEY SEARCH */ ++ 217 1360 630 160 180>; ++ }; ++ }; ++ }; ++}; ++ ++&iomuxc { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_hog>; ++ ++ zero-gravitas { ++ pinctrl_hog: hoggrp { ++ fsl,pins = < ++ /* MAX17135 pwrgood */ ++ MX6SL_PAD_EPDC_PWRSTAT__GPIO2_IO13 PAD_CTL_NONE ++ /* MAX17135 vcom ctrl */ ++ MX6SL_PAD_EPDC_VCOM0__GPIO2_IO03 PAD_CTL_NONE ++ /* MAX17135 wakeup */ ++ MX6SL_PAD_EPDC_PWRWAKEUP__GPIO2_IO14 PAD_CTL_NONE ++ /* MAX17135 v3p3 */ ++ MX6SL_PAD_EPDC_PWRCTRL0__GPIO2_IO07 PAD_CTL_NONE ++ /* MAX17135 intr */ ++ MX6SL_PAD_EPDC_PWRINT__GPIO2_IO12 PAD_CTL_NONE ++ ++ /* BQ27441 low power */ ++ MX6SL_PAD_KEY_ROW3__GPIO3_IO31 0x17000 ++ ++ /* Wacom interrupt */ ++ MX6SL_PAD_EPDC_PWRCTRL3__GPIO2_IO10 0x17000 ++ /* Wacom reset */ ++ MX6SL_PAD_KEY_COL6__GPIO4_IO04 0x110b0 ++ ++ /* CYTTSP interrupt */ ++ MX6SL_PAD_KEY_ROW5__GPIO4_IO03 0x17000 ++ /* CYTTSP reset */ ++ MX6SL_PAD_KEY_ROW6__GPIO4_IO05 0x110b0 ++ ++ /* USB OTG1 voltage control */ ++ /*MX6SL_PAD_ECSPI2_SS0__GPIO4_IO15 0x17000*/ ++ /*MX6SL_PAD_ECSPI2_SS0__GPIO4_IO15 0x000b0*/ ++ MX6SL_PAD_ECSPI2_SS0__GPIO4_IO15 PAD_CTL_NONE ++ /*MX6SL_PAD_ECSPI2_SS0__USB_OTG1_PWR 0x17000*/ ++ /* USB OTG1 over current detection */ ++ MX6SL_PAD_ECSPI2_MISO__USB_OTG1_OC 0x1b0b0 ++ ++ /* Charger control */ ++ MX6SL_PAD_KEY_ROW1__GPIO3_IO27 0x110b0 ++ /* Charger status */ ++ MX6SL_PAD_KEY_ROW4__GPIO4_IO01 PAD_CTL_NONE ++ ++ /* USDHC1 card detect */ ++ MX6SL_PAD_KEY_ROW7__GPIO4_IO07 0x17059 ++ ++ /* CHIP_WAKE_HOST */ ++ MX6SL_PAD_KEY_COL5__GPIO4_IO02 PAD_CTL_NONE ++ /* POWER_WIFI: WiFi external power control */ ++ MX6SL_PAD_KEY_COL3__GPIO3_IO30 PAD_CTL_NONE ++ /* WL_DIS: WiFi internal power control */ ++ MX6SL_PAD_KEY_COL4__GPIO4_IO00 PAD_CTL_NONE ++ ++ /* 32Khz clock from i.MX6 to WiFi for power saving */ ++ MX6SL_PAD_REF_CLK_32K__XTALOSC_REF_CLK_32K 0x1b0b0 ++ >; ++ }; ++ ++ pinctrl_epdc_0: epdcgrp-0 { ++ fsl,pins = < ++ MX6SL_PAD_EPDC_D0__EPDC_DATA00 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D1__EPDC_DATA01 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D2__EPDC_DATA02 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D3__EPDC_DATA03 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D4__EPDC_DATA04 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D5__EPDC_DATA05 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D6__EPDC_DATA06 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D7__EPDC_DATA07 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D8__EPDC_DATA08 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D9__EPDC_DATA09 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D10__EPDC_DATA10 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D11__EPDC_DATA11 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D12__EPDC_DATA12 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D13__EPDC_DATA13 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D14__EPDC_DATA14 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D15__EPDC_DATA15 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_GDCLK__EPDC_GDCLK PAD_CTL_NONE ++ MX6SL_PAD_EPDC_GDOE__EPDC_GDOE PAD_CTL_NONE ++ MX6SL_PAD_EPDC_GDSP__EPDC_GDSP PAD_CTL_NONE ++ MX6SL_PAD_EPDC_SDCE0__EPDC_SDCE0 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_SDCLK__EPDC_SDCLK_P PAD_CTL_NONE ++ MX6SL_PAD_EPDC_SDLE__EPDC_SDLE PAD_CTL_NONE ++ MX6SL_PAD_EPDC_SDOE__EPDC_SDOE PAD_CTL_NONE ++ MX6SL_PAD_EPDC_BDR0__EPDC_BDR0 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_BDR1__EPDC_BDR1 PAD_CTL_NONE ++ >; ++ }; ++ ++ pinctrl_i2c1: i2c1grp { ++ fsl,pins = < ++ MX6SL_PAD_I2C1_SCL__I2C1_SCL 0x4001b8b1 ++ MX6SL_PAD_I2C1_SDA__I2C1_SDA 0x4001b8b1 ++ >; ++ }; ++ ++ ++ pinctrl_i2c2: i2c2grp { ++ fsl,pins = < ++ MX6SL_PAD_I2C2_SCL__I2C2_SCL 0x4001b8b1 ++ MX6SL_PAD_I2C2_SDA__I2C2_SDA 0x4001b8b1 ++ >; ++ }; ++ ++ pinctrl_i2c3: i2c3grp { ++ fsl,pins = < ++ MX6SL_PAD_AUD_RXFS__I2C3_SCL 0x4001b8b1 ++ MX6SL_PAD_AUD_RXC__I2C3_SDA 0x4001b8b1 ++ >; ++ }; ++ ++ pinctrl_keys: keygrp { ++ fsl,pins = < ++ MX6SL_PAD_ECSPI1_MOSI__GPIO4_IO09 0x100b1 ++ MX6SL_PAD_KEY_COL0__GPIO3_IO24 0x100b1 ++ MX6SL_PAD_KEY_COL1__GPIO3_IO26 0x100b1 ++ MX6SL_PAD_KEY_COL2__GPIO3_IO28 0x100b1 ++ >; ++ }; ++ ++ pinctrl_uart1: uart1grp { ++ fsl,pins = < ++ MX6SL_PAD_UART1_RXD__UART1_RX_DATA 0x1b0b1 ++ MX6SL_PAD_UART1_TXD__UART1_TX_DATA 0x1b0b1 ++ >; ++ }; ++ ++ pinctrl_usbotg1: usbotg1grp { ++ fsl,pins = < ++ MX6SL_PAD_EPDC_PWRCOM__USB_OTG1_ID 0x17059 ++ >; ++ }; ++ ++ pinctrl_usdhc1: usdhc1grp { ++ fsl,pins = < ++ MX6SL_PAD_SD1_CMD__SD1_CMD PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD1_CLK__SD1_CLK PAD_CTL_USDHC_CLK_DEFAULT ++ MX6SL_PAD_SD1_DAT0__SD1_DATA0 PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD1_DAT1__SD1_DATA1 PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD1_DAT2__SD1_DATA2 PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD1_DAT3__SD1_DATA3 PAD_CTL_USDHC_DEFAULT ++ >; ++ }; ++ ++ pinctrl_usdhc1_100mhz: usdhc1grp100mhz { ++ fsl,pins = < ++ MX6SL_PAD_SD1_CMD__SD1_CMD PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD1_CLK__SD1_CLK PAD_CTL_USDHC_CLK_100MHZ ++ MX6SL_PAD_SD1_DAT0__SD1_DATA0 PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD1_DAT1__SD1_DATA1 PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD1_DAT2__SD1_DATA2 PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD1_DAT3__SD1_DATA3 PAD_CTL_USDHC_100MHZ ++ >; ++ }; ++ ++ pinctrl_usdhc1_200mhz: usdhc1grp200mhz { ++ fsl,pins = < ++ MX6SL_PAD_SD1_CMD__SD1_CMD PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD1_CLK__SD1_CLK PAD_CTL_USDHC_CLK_200MHZ ++ MX6SL_PAD_SD1_DAT0__SD1_DATA0 PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD1_DAT1__SD1_DATA1 PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD1_DAT2__SD1_DATA2 PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD1_DAT3__SD1_DATA3 PAD_CTL_USDHC_200MHZ ++ >; ++ }; ++ ++ pinctrl_usdhc2: usdhc2grp { ++ fsl,pins = < ++ MX6SL_PAD_SD2_CMD__SD2_CMD PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD2_CLK__SD2_CLK PAD_CTL_USDHC_CLK_DEFAULT ++ MX6SL_PAD_SD2_DAT0__SD2_DATA0 PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD2_DAT1__SD2_DATA1 PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD2_DAT2__SD2_DATA2 PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD2_DAT3__SD2_DATA3 PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD2_DAT4__SD2_DATA4 PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD2_DAT5__SD2_DATA5 PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD2_DAT6__SD2_DATA6 PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD2_DAT7__SD2_DATA7 PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD2_RST__SD2_RESET PAD_CTL_USDHC_CLK_DEFAULT ++ >; ++ }; ++ ++ pinctrl_usdhc2_100mhz: usdhc2grp100mhz { ++ fsl,pins = < ++ MX6SL_PAD_SD2_CMD__SD2_CMD PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD2_CLK__SD2_CLK PAD_CTL_USDHC_CLK_100MHZ ++ MX6SL_PAD_SD2_DAT0__SD2_DATA0 PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD2_DAT1__SD2_DATA1 PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD2_DAT2__SD2_DATA2 PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD2_DAT3__SD2_DATA3 PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD2_DAT4__SD2_DATA4 PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD2_DAT5__SD2_DATA5 PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD2_DAT6__SD2_DATA6 PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD2_DAT7__SD2_DATA7 PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD2_RST__SD2_RESET PAD_CTL_USDHC_CLK_DEFAULT ++ >; ++ }; ++ ++ pinctrl_usdhc2_200mhz: usdhc2grp200mhz { ++ fsl,pins = < ++ MX6SL_PAD_SD2_CMD__SD2_CMD PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD2_CLK__SD2_CLK PAD_CTL_USDHC_CLK_200MHZ ++ MX6SL_PAD_SD2_DAT0__SD2_DATA0 PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD2_DAT1__SD2_DATA1 PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD2_DAT2__SD2_DATA2 PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD2_DAT3__SD2_DATA3 PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD2_DAT4__SD2_DATA4 PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD2_DAT5__SD2_DATA5 PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD2_DAT6__SD2_DATA6 PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD2_DAT7__SD2_DATA7 PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD2_RST__SD2_RESET PAD_CTL_USDHC_CLK_DEFAULT ++ >; ++ }; ++ ++ pinctrl_usdhc3: usdhc3grp { ++ fsl,pins = < ++ MX6SL_PAD_SD3_CMD__SD3_CMD PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD3_CLK__SD3_CLK PAD_CTL_USDHC_CLK_DEFAULT ++ MX6SL_PAD_SD3_DAT0__SD3_DATA0 PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD3_DAT1__SD3_DATA1 PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD3_DAT2__SD3_DATA2 PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD3_DAT3__SD3_DATA3 PAD_CTL_USDHC_DEFAULT ++ >; ++ }; ++ ++ pinctrl_usdhc3_100mhz: usdhc3grp100mhz { ++ fsl,pins = < ++ MX6SL_PAD_SD3_CMD__SD3_CMD PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD3_CLK__SD3_CLK PAD_CTL_USDHC_CLK_100MHZ ++ MX6SL_PAD_SD3_DAT0__SD3_DATA0 PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD3_DAT1__SD3_DATA1 PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD3_DAT2__SD3_DATA2 PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD3_DAT3__SD3_DATA3 PAD_CTL_USDHC_100MHZ ++ >; ++ }; ++ ++ pinctrl_usdhc3_200mhz: usdhc3grp200mhz { ++ fsl,pins = < ++ MX6SL_PAD_SD3_CMD__SD3_CMD PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD3_CLK__SD3_CLK PAD_CTL_USDHC_CLK_200MHZ ++ MX6SL_PAD_SD3_DAT0__SD3_DATA0 PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD3_DAT1__SD3_DATA1 PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD3_DAT2__SD3_DATA2 PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD3_DAT3__SD3_DATA3 PAD_CTL_USDHC_200MHZ ++ >; ++ }; ++ }; ++}; ++ ++&pxp { ++ status = "okay"; ++}; ++ ++&snvs_poweroff { ++ status = "okay"; ++}; ++ ++&uart1 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_uart1>; ++ status = "okay"; ++}; ++ ++/*&usbmisc { ++ vbus-wakeup-supply = <®_usb_otg1_vbus>; ++};*/ + + &usbotg1 { +- vbus-supply = <®_usb_otg1_vbus>; ++ /*vbus-supply = <®_usb_otg1_vbus>;*/ ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_usbotg1>; ++ disable-over-current; ++ /* This kills the speed */ ++ imx-usb-charger-detection; ++ srp-disable; ++ hnp-disable; ++ adp-disable; ++ status = "okay"; + }; + ++&usbotg2 { ++ dr_mode = "host"; ++ disable-over-current; ++ srp-disable; ++ hnp-disable; ++ adp-disable; ++ status = "disabled"; ++}; ++ ++ ++&usbphy1 { ++ tx-d-cal = <0x5>; ++}; ++ ++&usbphy2 { ++ tx-d-cal = <0x5>; ++ status = "disabled"; ++}; ++ ++&usdhc1 { ++ pinctrl-names = "default", "state_100mhz", "state_200mhz"; ++ pinctrl-0 = <&pinctrl_usdhc1>; ++ pinctrl-1 = <&pinctrl_usdhc1_100mhz>; ++ pinctrl-2 = <&pinctrl_usdhc1_200mhz>; ++ bus-width = <4>; ++ cd-gpios = <&gpio4 7 GPIO_ACTIVE_LOW>; ++ disable-wp; ++ wp-controller; ++ keep-power-in-suspend; ++ enable-sdio-wakeup; ++ no-1-8-v; ++ status = "okay"; ++}; ++ ++&usdhc2 { ++ pinctrl-names = "default", "state_100mhz", "state_200mhz"; ++ pinctrl-0 = <&pinctrl_usdhc2>; ++ pinctrl-1 = <&pinctrl_usdhc2_100mhz>; ++ pinctrl-2 = <&pinctrl_usdhc2_200mhz>; ++ bus-width = <8>; ++ non-removable; ++ keep-power-in-suspend; ++ no-1-8-v; ++ disable-wp; ++ cap-mmc-highspeed; ++ status = "okay"; ++}; ++ ++&usdhc3 { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ pinctrl-names = "default", "state_100mhz", "state_200mhz"; ++ pinctrl-0 = <&pinctrl_usdhc3>; ++ pinctrl-1 = <&pinctrl_usdhc3_100mhz>; ++ pinctrl-2 = <&pinctrl_usdhc3_200mhz>; ++ mmc-pwrseq = <&wifi_pwrseq>; ++ bus-width = <4>; ++ enable-sdio-wakeup; ++ non-removable; ++ disable-wp; ++ no-1-8-v; ++ wifi-host; ++ keep-power-in-suspend; ++ status = "okay"; ++ ++ brcmf: bcrmf@1 { ++ reg = <1>; ++ compatible = "brcm,bcm4329-fmac"; ++ /*resets = <&wifi_reset>;*/ ++ }; ++}; diff --git a/user/mathjax2/APKBUILD b/user/mathjax2/APKBUILD new file mode 100644 index 0000000..bc78cb6 --- /dev/null +++ b/user/mathjax2/APKBUILD @@ -0,0 +1,38 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=mathjax2 +pkgver=2.7.9 +pkgrel=0 +pkgdesc="An open source JavaScript display engine for mathematics that works in all modern browsers" +url="https://www.mathjax.org/" +arch=noarch +license="Apache-2.0" +source="$pkgname-$pkgver.tar.gz::https://github.com/mathjax/MathJax/archive/$pkgver.tar.gz" +builddir="$srcdir"/MathJax-$pkgver +options="!check" # No testsuite + +build() { + # Remove unneeded stuff, see https://github.com/mathjax/MathJax-docs/wiki/Guide%3A-reducing-size-of-a-mathjax-installation + for i in docs test unpacked fonts/HTML-CSS/TeX/png; do + rm -r $i + done + for _format in eot otf svg ; do + find . -type d -name "$_format" -prune -exec rm -rf {} \; + done +} + +package() { + mkdir -p \ + "$pkgdir"/usr/share/fonts \ + "$pkgdir"/usr/share/licenses/mathjax2 + + cp -a "$builddir" "$pkgdir"/usr/share/mathjax2 + + mv "$pkgdir"/usr/share/mathjax2/fonts "$pkgdir"/usr/share/fonts/mathjax2 + ln -s /usr/share/fonts/mathjax2 "$pkgdir"/usr/share/mathjax2/fonts + mv "$pkgdir"/usr/share/mathjax2/LICENSE "$pkgdir"/usr/share/licenses/mathjax2/ +} +sha512sums=" +ac7b2dfc6064148e941e5ee05361467514e5f28449dbb697ff1df556968ccb71f501c4021ade285cbbb995983513669c14d9c06886a7b83a5c75fa30504fa8ab mathjax2-2.7.9.tar.gz +" diff --git a/unmaintained/paperless-ngx/1746_add-OpenID-Connect-SSO-support-via-django-allauth.patch b/user/paperless-ngx/1746_add-OpenID-Connect-SSO-support-via-django-allauth.patch similarity index 100% rename from unmaintained/paperless-ngx/1746_add-OpenID-Connect-SSO-support-via-django-allauth.patch rename to user/paperless-ngx/1746_add-OpenID-Connect-SSO-support-via-django-allauth.patch diff --git a/unmaintained/paperless-ngx/APKBUILD b/user/paperless-ngx/APKBUILD similarity index 99% rename from unmaintained/paperless-ngx/APKBUILD rename to user/paperless-ngx/APKBUILD index 01ea699..3e017fb 100644 --- a/unmaintained/paperless-ngx/APKBUILD +++ b/user/paperless-ngx/APKBUILD @@ -8,7 +8,6 @@ url="https://github.com/paperless-ngx/paperless-ngx" license="GPL-3.0-only" # s390x: ocrmypdf py3-joblib py3-scikit-learn py3-watchfiles # armhf / ppc64le: py3-uvloop -# all: uvicorn doesn't yet work with websockets 14 arch="noarch !s390x !armhf !ppc64le" install="$pkgname.post-install $pkgname.post-upgrade $pkgname.pre-install" depends=" diff --git a/unmaintained/paperless-ngx/paperless-consumer.openrc b/user/paperless-ngx/paperless-consumer.openrc similarity index 100% rename from unmaintained/paperless-ngx/paperless-consumer.openrc rename to user/paperless-ngx/paperless-consumer.openrc diff --git a/unmaintained/paperless-ngx/paperless-ngx.post-install b/user/paperless-ngx/paperless-ngx.post-install similarity index 100% rename from unmaintained/paperless-ngx/paperless-ngx.post-install rename to user/paperless-ngx/paperless-ngx.post-install diff --git a/unmaintained/paperless-ngx/paperless-ngx.post-upgrade b/user/paperless-ngx/paperless-ngx.post-upgrade similarity index 100% rename from unmaintained/paperless-ngx/paperless-ngx.post-upgrade rename to user/paperless-ngx/paperless-ngx.post-upgrade diff --git a/unmaintained/paperless-ngx/paperless-ngx.pre-install b/user/paperless-ngx/paperless-ngx.pre-install similarity index 100% rename from unmaintained/paperless-ngx/paperless-ngx.pre-install rename to user/paperless-ngx/paperless-ngx.pre-install diff --git a/unmaintained/paperless-ngx/paperless-scheduler.openrc b/user/paperless-ngx/paperless-scheduler.openrc similarity index 100% rename from unmaintained/paperless-ngx/paperless-scheduler.openrc rename to user/paperless-ngx/paperless-scheduler.openrc diff --git a/unmaintained/paperless-ngx/paperless-task-queue.openrc b/user/paperless-ngx/paperless-task-queue.openrc similarity index 100% rename from unmaintained/paperless-ngx/paperless-task-queue.openrc rename to user/paperless-ngx/paperless-task-queue.openrc diff --git a/unmaintained/paperless-ngx/paperless-webserver.openrc b/user/paperless-ngx/paperless-webserver.openrc similarity index 100% rename from unmaintained/paperless-ngx/paperless-webserver.openrc rename to user/paperless-ngx/paperless-webserver.openrc diff --git a/unmaintained/paperless-ngx/paperless.conf b/user/paperless-ngx/paperless.conf similarity index 100% rename from unmaintained/paperless-ngx/paperless.conf rename to user/paperless-ngx/paperless.conf diff --git a/user/papermc-plugin-essentialsx/APKBUILD b/user/papermc-plugin-essentialsx/APKBUILD deleted file mode 100644 index 51459a5..0000000 --- a/user/papermc-plugin-essentialsx/APKBUILD +++ /dev/null @@ -1,81 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=papermc-plugin-essentialsx -pkgver=2.21.1 -_gittag=$pkgver -pkgrel=0 -pkgdesc="EssentialsX is the essential plugin suite for Minecraft servers, with over 130 commands for servers of all size and scale." -# blocked by luckperms -# armv7: blocked my openjdk21-jdk -#arch='noarch !armv7' -url="https://essentialsx.net/" -license="GPL-3.0" -depends=" - papermc>=1.8.8 - papermc-plugin-luckperms - papermc-plugin-vault -" -makedepends="openjdk21-jdk" -source="$pkgname-$_gittag.tar.gz::https://github.com/EssentialsX/Essentials/archive/$_gittag.tar.gz" -builddir="$srcdir"/Essentials-$_gittag - -subpackages="$pkgname-chat $pkgname-spawn $pkgname-antibuild $pkgname-discord $pkgname-geo $pkgname-protect $pkgname-xmpp" - -build() { - ./gradlew build -} - -check() { - ./gradlew test -} - -package() { - install -Dm644 "$builddir"/jars/EssentialsX-*.jar "$pkgdir/var/lib/papermc/plugins/Essentials.jar" -} - -chat() { - pkgdesc="Chat formatting, local chat" - depends="$pkgname" - install -Dm644 "$builddir"/jars/EssentialsXChat-*.jar "$subpkgdir/var/lib/papermc/plugins/EssentialsChat.jar" -} - -spawn() { - pkgdesc="Spawnpoint control, per-player spawns" - depends="$pkgname" - install -Dm644 "$builddir"/jars/EssentialsXSpawn-*.jar "$subpkgdir/var/lib/papermc/plugins/EssentialsSpawn.jar" -} - -antibuild() { - pkgdesc="Simple permissions-based building control" - depends="$pkgname" - install -Dm644 "$builddir"/jars/EssentialsXAntiBuild-*.jar "$subpkgdir/var/lib/papermc/plugins/EssentialsAntiBuild.jar" -} - -discord() { - pkgdesc="Lightweight chat, messaging and command integration with Discord" - depends="$pkgname" - install -Dm644 "$builddir"/jars/EssentialsXDiscord-*.jar "$subpkgdir/var/lib/papermc/plugins/EssentialsDiscord.jar" - install -Dm644 "$builddir"/jars/EssentialsXDiscordLink-*.jar "$subpkgdir/var/lib/papermc/plugins/EssentialsDiscordLink.jar" -} - -geo() { - pkgdesc="Geographical player lookup (formerly EssentialsX GeoIP)" - depends="$pkgname" - install -Dm644 "$builddir"/jars/EssentialsXGeoIP-*.jar "$subpkgdir/var/lib/papermc/plugins/EssentialsGeo.jar" -} - -protect() { - pkgdesc="Configurable world protection and control" - depends="$pkgname" - install -Dm644 "$builddir"/jars/EssentialsXProtect-*.jar "$subpkgdir/var/lib/papermc/plugins/EssentialsProtect.jar" -} - -xmpp() { - pkgdesc="Lightweight chat, messaging and server log integration with Jabber/XMPP services" - depends="$pkgname" - install -Dm644 "$builddir"/jars/EssentialsXXMPP-*.jar "$subpkgdir/var/lib/papermc/plugins/EssentialsXMPP.jar" -} - -sha512sums=" -2634a909e4fced837acfd89e0972511da418a9ab3d648f4eb466688b779c7d4215aa25ed891504bc39805d292f1ebf72bb71077c0354117fdaf28ba032483262 papermc-plugin-essentialsx-2.21.1.tar.gz -" diff --git a/user/papermc-plugin-luckperms/APKBUILD b/user/papermc-plugin-luckperms/APKBUILD deleted file mode 100644 index 6b7a4e4..0000000 --- a/user/papermc-plugin-luckperms/APKBUILD +++ /dev/null @@ -1,36 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=papermc-plugin-luckperms -pkgver=5.4.151 -_gittag=0fef481d480737528491fc0b3b8487eb1612f955 -pkgrel=0 -pkgdesc="An advanced permissions plugin for Bukkit/Spigot, BungeeCord and Sponge." -# dependency not available upstream anymore -# armv7: blocked by openjdk21-jdk -#arch='noarch !armv7' -url="https://github.com/lucko/LuckPerms" -license="MIT" -depends="papermc>=1.8.8" -makedepends="openjdk21-jdk" -source="$pkgname-$_gittag.tar.gz::https://github.com/LuckPerms/LuckPerms/archive/$_gittag.tar.gz" -builddir="$srcdir"/LuckPerms-$_gittag - -prepare() { - default_prepare - sed -i "s|project.ext.patchVersion = determinePatchVersion()|project.ext.patchVersion = '${pkgver##*.}'|" build.gradle -} - -build() { - ./gradlew build -} - -check() { - ./gradlew test -} - -package() { - install -Dm644 "$builddir"/bukkit/loader/build/libs/LuckPerms-Bukkit-*.jar "$pkgdir/var/lib/papermc/plugins/LuckPerms.jar" -} -sha512sums=" -e016d2a161472974cc75151e1a6cb3495881d4db7e0aa75d81a1c54fd16d191fe721b1f9fadeaac0bef7ec4a7c47329a2cf367cf3a7577b284077ec173db0579 papermc-plugin-luckperms-0fef481d480737528491fc0b3b8487eb1612f955.tar.gz -" diff --git a/user/papermc-plugin-vault/1996cfa_finish-removal-native-support-for-abandonned-economy-plugins.patch b/user/papermc-plugin-vault/1996cfa_finish-removal-native-support-for-abandonned-economy-plugins.patch deleted file mode 100644 index 7ea071a..0000000 Binary files a/user/papermc-plugin-vault/1996cfa_finish-removal-native-support-for-abandonned-economy-plugins.patch and /dev/null differ diff --git a/user/papermc-plugin-vault/2022cb0_support-newer-jdk-for-building.patch b/user/papermc-plugin-vault/2022cb0_support-newer-jdk-for-building.patch deleted file mode 100644 index 5c1adee..0000000 --- a/user/papermc-plugin-vault/2022cb0_support-newer-jdk-for-building.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 2022cb08922caa42aa77faca254c9b7d7506bee8 Mon Sep 17 00:00:00 2001 -From: Geolykt -Date: Mon, 27 Jun 2022 12:02:49 +0200 -Subject: [PATCH] Support newer JDKs for building - -Apparently the ancient version of lombok used -by a dependency is not compatible with newer -versions of java. As Vault proper did not make -use of lombok, it can be safely removed without -declaring an alternative. - -This commit allows Vault to build under Java 17. ---- - pom.xml | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/pom.xml b/pom.xml -index 5b8a6dfd..17c189fd 100644 ---- a/pom.xml -+++ b/pom.xml -@@ -324,6 +324,12 @@ Vault currently supports the following: Permissions 3, PEX, GroupManager, bPerms - craftconomy3 - 3.2.2-SNAPSHOT - true -+ -+ -+ org.projectlombok -+ lombok -+ -+ - - - net.crystalyx.bukkit.simplyperms diff --git a/user/papermc-plugin-vault/823_add-option-to-silence-no-update-logs.patch b/user/papermc-plugin-vault/823_add-option-to-silence-no-update-logs.patch deleted file mode 100644 index 7cb7ba1..0000000 --- a/user/papermc-plugin-vault/823_add-option-to-silence-no-update-logs.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 52df9d3287e8d593d0e4d999c6d5daaebe947ca1 Mon Sep 17 00:00:00 2001 -From: Ricardo Boss -Date: Tue, 28 Jun 2022 18:50:18 +0200 -Subject: [PATCH] Add option to silence "no update" logs (#823) - -* Added "silent-no-update" config option - -Added switch to turn off messages if no update is available. - -* Set default value for "silent-no-update" - -* Removed any "no update available" option and message ---- - src/net/milkbowl/vault/Vault.java | 3 --- - 1 file changed, 3 deletions(-) - -diff --git a/src/net/milkbowl/vault/Vault.java b/src/net/milkbowl/vault/Vault.java -index ef8b5578..fd2a9787 100644 ---- a/src/net/milkbowl/vault/Vault.java -+++ b/src/net/milkbowl/vault/Vault.java -@@ -171,8 +171,6 @@ public void run() { - log.warning("Update at: https://dev.bukkit.org/projects/vault"); - } else if (currentVersion > newVersion) { - log.info("Stable Version: " + newVersionTitle + " | Current Version: " + currentVersionTitle); -- } else { -- log.info("No new version available"); - } - } catch (Exception e) { - // ignore exceptions -@@ -182,7 +180,6 @@ public void run() { - }, 0, 432000); - - } -- - }); - - // Load up the Plugin metrics diff --git a/user/papermc-plugin-vault/868_update-bstats.patch b/user/papermc-plugin-vault/868_update-bstats.patch deleted file mode 100644 index 2ce8023..0000000 --- a/user/papermc-plugin-vault/868_update-bstats.patch +++ /dev/null @@ -1,72 +0,0 @@ -From 3f20655f0b1b9c7a0f69eb241c5bedd8e748b5c9 Mon Sep 17 00:00:00 2001 -From: Leonardo Di Gianfelice Stornelli - -Date: Tue, 28 Jun 2022 00:34:40 +0200 -Subject: [PATCH] Update bStats (#868) - ---- - pom.xml | 2 +- - src/net/milkbowl/vault/Vault.java | 9 +++++---- - 2 files changed, 6 insertions(+), 5 deletions(-) - -diff --git a/pom.xml b/pom.xml -index 17c189fd..ccd8cde4 100644 ---- a/pom.xml -+++ b/pom.xml -@@ -85,7 +85,7 @@ Vault currently supports the following: Permissions 3, PEX, GroupManager, bPerms - - org.bstats - bstats-bukkit -- 1.5 -+ 3.0.0 - - - com.gmail.bleedobsidian.miconomy -diff --git a/src/net/milkbowl/vault/Vault.java b/src/net/milkbowl/vault/Vault.java -index 30f6f17f..ef8b5578 100644 ---- a/src/net/milkbowl/vault/Vault.java -+++ b/src/net/milkbowl/vault/Vault.java -@@ -78,6 +78,7 @@ - import net.milkbowl.vault.permission.plugins.Permission_KPerms; - - import org.bstats.bukkit.Metrics; -+import org.bstats.charts.SimplePie; - import org.bukkit.Bukkit; - import org.bukkit.OfflinePlayer; - import org.bukkit.command.Command; -@@ -185,7 +186,7 @@ public void run() { - }); - - // Load up the Plugin metrics -- Metrics metrics = new Metrics(this); -+ Metrics metrics = new Metrics(this, 887); - findCustomData(metrics); - - log.info(String.format("Enabled Version %s", getDescription().getVersion())); -@@ -581,7 +582,7 @@ private void findCustomData(Metrics metrics) { - econ = rspEcon.getProvider(); - } - final String econName = econ != null ? econ.getName() : "No Economy"; -- metrics.addCustomChart(new Metrics.SimplePie("economy", new Callable() { -+ metrics.addCustomChart(new SimplePie("economy", new Callable() { - @Override - public String call() { - return econName; -@@ -590,7 +591,7 @@ public String call() { - - // Create our Permission Graph and Add our permission Plotters - final String permName = Bukkit.getServer().getServicesManager().getRegistration(Permission.class).getProvider().getName(); -- metrics.addCustomChart(new Metrics.SimplePie("permission", new Callable() { -+ metrics.addCustomChart(new SimplePie("permission", new Callable() { - @Override - public String call() { - return permName; -@@ -604,7 +605,7 @@ public String call() { - chat = rspChat.getProvider(); - } - final String chatName = chat != null ? chat.getName() : "No Chat"; -- metrics.addCustomChart(new Metrics.SimplePie("chat", new Callable() { -+ metrics.addCustomChart(new SimplePie("chat", new Callable() { - @Override - public String call() { - return chatName; diff --git a/user/papermc-plugin-vault/APKBUILD b/user/papermc-plugin-vault/APKBUILD deleted file mode 100644 index 21897eb..0000000 --- a/user/papermc-plugin-vault/APKBUILD +++ /dev/null @@ -1,43 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=papermc-plugin-vault -pkgver=1.7.3 -pkgrel=0 -pkgdesc="Vault of common APIs for Bukkit Plugins" -# armv7: blocked by openjdk21-jdk -arch='noarch !armv7' -url="https://github.com/MilkBowl/Vault" -license="MIT" -depends="papermc>=1.8.8" -makedepends=" - openjdk21-jdk - maven -" -source=" - vault-$pkgver.tar.gz::https://github.com/MilkBowl/Vault/archive/refs/tags/1.7.3.tar.gz - 2022cb0_support-newer-jdk-for-building.patch - 868_update-bstats.patch - 823_add-option-to-silence-no-update-logs.patch - 1996cfa_finish-removal-native-support-for-abandonned-economy-plugins.patch - " -builddir="$srcdir"/Vault-$pkgver - -build() { - mvn compile - mvn package -} - -check() { - mvn test -} - -package() { - install -Dm644 "$builddir"/target/Vault-$pkgver.jar "$pkgdir/var/lib/papermc/plugins/Vault.jar" -} -sha512sums=" -3d154945e63b7824f0a0e0900fe6db7dc77c97f1967c29760d27a3322ca0b95d76965d8574c24b7cc0e86e822f9b5e3f860cb7167796351c9a921ddf5ef3d36b vault-1.7.3.tar.gz -8b7197b25acf06e545f10dd7dc5447aab6a73d3455bf89b01a4b466331eefa77c86152a47818348cfb901a0d65cff115b75ae37e0f8bb702c35cf13a3942a484 2022cb0_support-newer-jdk-for-building.patch -9124d0feef633f405c3aea6081d4b749df9828d99d0c93d09ba52adb680a781288523d2dfc71be566b8cafd58ac97f152258174ab02294c6e97020a033ee0faa 868_update-bstats.patch -b76b385ff62a955430db8d4d60592983e7475e1e63cd6a9e8c0be0a035662ec4472c6f9c8f09125745c198074695b3e04fe6ad96cbafa5faaba72bcf1bfee896 823_add-option-to-silence-no-update-logs.patch -ea5e36649e65ca690fd8a075bb5f251a8b449ab780a546007e242ec465c58c8c5ae346efac5f1b52e3287f4f400c658f745d130d1e361ecca3436dcf5cb46fb5 1996cfa_finish-removal-native-support-for-abandonned-economy-plugins.patch -" diff --git a/user/papermc-plugin-worldedit/APKBUILD b/user/papermc-plugin-worldedit/APKBUILD deleted file mode 100644 index f487664..0000000 --- a/user/papermc-plugin-worldedit/APKBUILD +++ /dev/null @@ -1,35 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=papermc-plugin-worldedit -pkgver=7.3.13 -_pkgver=$pkgver -pkgrel=0 -pkgdesc="WorldEdit is an easy-to-use in-game Minecraft map editor" -# missingupstream dependencies -# armv7: blocked by openjdk21-jdk -#arch='noarch !armv7' -url="https://github.com/EngineHub/WorldEdit" -license="GPL-3.0" -depends="papermc>=1.13.2" -makedepends="openjdk21-jdk" -source=" - $pkgname-$pkgver.tar.gz::https://github.com/EngineHub/WorldEdit/archive/refs/tags/$pkgver.tar.gz - papermc-fix-build.patch - " -builddir="$srcdir"/WorldEdit-$pkgver - -build() { - ./gradlew build --parallel -} - -check() { - ./gradlew test -} - -package() { - install -Dm644 "$builddir"/worldedit-bukkit/build/libs/worldedit-bukkit-$pkgver-dist.jar "$pkgdir/var/lib/papermc/plugins/WorldEdit.jar" -} -sha512sums=" -dbea1e2ff5b41ad25f8ddc5ae5456f9b7337d406cb4791fb3718b38bfbb94b0d8ba9fc7e2cd5c0d94c3c1845a35e68a87d89c0f147f9d988dd3fc3e375144198 papermc-plugin-worldedit-7.3.13.tar.gz -e36ac06da26e8817c7c666c972a09cbdba0fca8e0a511e53c5650d46ef1ee9a44d783900ed0afb39faab5dc718bf68e26d8c9b310ceedffa5d11bd15880aaa88 papermc-fix-build.patch -" diff --git a/user/papermc-plugin-worldedit/papermc-fix-build.patch b/user/papermc-plugin-worldedit/papermc-fix-build.patch deleted file mode 100644 index 95710e9..0000000 --- a/user/papermc-plugin-worldedit/papermc-fix-build.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/gradle/libs.versions.toml.orig b/gradle/libs.versions.toml -index 5f0e7da..ff0569b 100644 ---- a/gradle/libs.versions.toml.orig -+++ b/gradle/libs.versions.toml -@@ -77,7 +77,7 @@ mockito-junit-jupiter.module = "org.mockito:mockito-junit-jupiter" - commonsCli = "commons-cli:commons-cli:1.4" - - # https://repo.papermc.io/service/rest/repository/browse/maven-public/io/papermc/paper/paper-api/ --paperApi = "io.papermc.paper:paper-api:1.21.5-R0.1-20250503.204036-71" -+paperApi = "io.papermc.paper:paper-api:1.21.5-R0.1-20250520.110141-3" - paperLib = "io.papermc:paperlib:1.0.8" - - dummypermscompat = "com.sk89q:dummypermscompat:1.10" diff --git a/user/papermc-plugin-worldguard/APKBUILD b/user/papermc-plugin-worldguard/APKBUILD deleted file mode 100644 index ba13b1d..0000000 --- a/user/papermc-plugin-worldguard/APKBUILD +++ /dev/null @@ -1,30 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=papermc-plugin-worldguard -pkgver=7.0.13_beta1 -_gittag=2f13ae0444409376feb6c7674591142fe854e12e -pkgrel=0 -pkgdesc="WorldGuard lets you and players guard areas of land against griefers and undesirables" -# armv7: blocked by openjdk21-jdk -arch='noarch !armv7' -url="https://github.com/EngineHub/WorldGuard" -license="GPL-3.0" -depends="papermc>=1.17.0" -makedepends="openjdk21-jdk" -source="$pkgname-$_gittag.tar.gz::https://github.com/EngineHub/WorldGuard/archive/$_gittag.tar.gz" -builddir="$srcdir"/WorldGuard-$_gittag - -build() { - ./gradlew build -} - -check() { - ./gradlew test -} - -package() { - install -Dm644 "$builddir"/worldguard-bukkit/build/libs/worldguard-bukkit-*dist.jar "$pkgdir/var/lib/papermc/plugins/WorldGuard.jar" -} -sha512sums=" -755646330c17df22b1d4eb6f38fc8ea712eff86a0165f2dba6dc1bcd420d2d112547adf60a35f268f45730b8444e540d7d08a02a50df0238bf16c9ff7dc799ff papermc-plugin-worldguard-2f13ae0444409376feb6c7674591142fe854e12e.tar.gz -" diff --git a/user/papermc/APKBUILD b/user/papermc/APKBUILD deleted file mode 100644 index f4a7f7b..0000000 --- a/user/papermc/APKBUILD +++ /dev/null @@ -1,51 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) -pkgname=papermc -pkgver=1.21.7 -_gittag=${pkgver/.0} -pkgrel=0 -pkgdesc="Next generation of Minecraft server, compatible with Spigot plugins and offering uncompromising performance" -# armv7: blocked by openjdk21-jdk -arch='noarch !armv7' -url="https://papermc.io/" -license='custom' -depends='openjdk21-jdk screen sudo bash gawk sed netcat-openbsd' -makedepends="gradle zstd" -options="!check" -subpackages="$pkgname-openrc" -source=" - https://ayakael.net/api/packages/mirrors/generic/papermc/$_gittag/papermc-$_gittag.tar.zst - papermc.initd - papermc.conf - papermc.sh -" - -build() { - ./gradlew --parallel createMojmapBundlerJar -} - -check() { - ./gradlew --parallel check -} - -package() { - install -Dm644 "$srcdir"/$pkgname.conf "$pkgdir"/etc/conf.d/$pkgname - install -Dm755 "$srcdir"/$pkgname.sh "$pkgdir"/usr/bin/$pkgname - install -Dm755 "$srcdir"/$pkgname.initd "$pkgdir"/etc/init.d/$pkgname - install -Dm644 "$builddir"/paper-server/build/libs/paper-server*.jar "$pkgdir"/var/lib/$pkgname/$pkgver.jar - ln -s $pkgver.jar "$pkgdir"/var/lib/$pkgname/server.jar - - # Link the log files - mkdir -p "$pkgdir"/var/log/ - install -dm2755 "$pkgdir"/var/lib/$pkgname/logs - ln -s "/var/lib/$pkgname"/logs "$pkgdir"/var/log/$pkgname - - # Give the group write permissions and set user or group ID on execution - chmod g+ws "$pkgdir"/var/lib/$pkgname -} -sha512sums=" -90c3017f7e4031816f6d4e30612a88d7b15d9e99cfb4e887b868e3d0d55ec5db0e9e71dc433dd399959da9b099e7fc4fd3768635ccabcce84d1adfc48837309a papermc-1.21.7.tar.zst -c5d1bf85ceb74162aaaf2bcd2d06dc2e3dd2e37c39f0cee2be7c8dbff9970a6aff1e48a43e6d1e83e6a0ac610bd89f62b1279bf27b64afa88d9831a36aebbd3e papermc.initd -9b8e267428731ee9255f82a93f1e8674d7e917a0f154bd395cd2280a49aa248a4b8427520b08dbb4b3a74a5471dac0e439eedc8ab94bf2e53bb8d411d2d8a789 papermc.conf -943ba0d4c10173246bdc6497dcedd54da0788f966841c8d3381398711d79f8d5eb07a24ce28f519b6f24f59d99fa9e74bc6bb882059f343df4eeda5de3660ac7 papermc.sh -" diff --git a/user/protobuf/APKBUILD b/user/protobuf/APKBUILD new file mode 100644 index 0000000..ec56f54 --- /dev/null +++ b/user/protobuf/APKBUILD @@ -0,0 +1,168 @@ +# Contributor: Sheila Aman +# Maintainer: Natanael Copa +pkgname=protobuf +_gemname=google-protobuf +pkgver=23.4 +_rubyver=3.23.4 +pkgrel=2 +pkgdesc="Library for extensible, efficient structure packing" +url="https://github.com/protocolbuffers/protobuf" +arch="all" +license="BSD-3-Clause" +depends=" + protoc=$pkgver-r$pkgrel + libprotoc=$pkgver-r$pkgrel + libprotobuf=$pkgver-r$pkgrel + libprotobuf-lite=$pkgver-r$pkgrel + " +depends_dev=" + protoc=$pkgver-r$pkgrel + zlib-dev + " +makedepends=" + $depends_dev + abseil-cpp-dev + cmake + ruby3.2 + ruby3.2-dev + ruby3.2-rake + samurai + " +checkdepends="gtest-dev" +subpackages=" + ruby3.2-$_gemname:_ruby + $pkgname-dev + $pkgname-vim::noarch + protoc + libprotoc + libprotobuf + libprotobuf-lite + " + # exclude.patch +source="$pkgname-$pkgver.tar.gz::https://github.com/protocolbuffers/protobuf/archive/refs/tags/v$pkgver.tar.gz + exclude.patch + protoc-cmake.patch + ruby-fix-cflags.patch + skip-failing-tests.patch + soversion.patch + trim-rakefile.patch + " + +# fails some +case "$CARCH" in +armhf) options="$options !check" ;; +esac + +build() { + export CFLAGS="$CFLAGS -DNDEBUG -O2 -flto=auto" + export CXXFLAGS="$CXXFLAGS -DNDEBUG -O2 -flto=auto -Wno-deprecated-declarations" + + cmake -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=None \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_SHARED_LIBS=ON \ + -Dprotobuf_BUILD_TESTS="$(want_check && echo ON || echo OFF)" \ + -Dprotobuf_BUILD_LIBPROTOC=ON \ + -Dprotobuf_ABSL_PROVIDER="package" \ + -Dprotobuf_ALLOW_CCACHE=ON \ + -Dprotobuf_USE_EXTERNAL_GTEST=ON + cmake --build build + + cd "$builddir"/ruby + + export PATH="$PATH:$builddir/build" + + # Generate proto files for built-in protocols. + rake genproto + + gem build $_gemname.gemspec + gem install --local \ + --install-dir dist \ + --ignore-dependencies \ + --no-document \ + --verbose \ + $_gemname +} + +# TODO: Run tests for ruby gem. +check() { + ctest --test-dir build --output-on-failure +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + sed -i \ + -e "/Requires:/s|;| |g" \ + -e "/Requires:/s|::|_|g" \ + "$pkgdir"/usr/lib/pkgconfig/protobuf.pc + + install -Dm644 editors/proto.vim \ + "$pkgdir"/usr/share/vim/vimfiles/syntax/proto.vim + + local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" + cd ruby/dist + + mkdir -p "$gemdir" + cp -r extensions gems specifications "$gemdir"/ + + # Remove duplicated .so libs (should be only in extensions directory). + find "$gemdir"/gems/ -name "*.so" -delete + + # Remove unnecessary files. + cd "$gemdir"/gems/$_gemname-$_rubyver + rm -r ext/ +} + +_ruby() { + depends="" + pkgdesc="Ruby bindings to Google's data interchange format" + + amove usr/lib/ruby/gems +} + +vim() { + pkgdesc="Vim syntax for $pkgname" + depends="" + install_if="$pkgname=$pkgver-r$pkgrel vim" + + amove usr/share/vim/vimfiles/syntax/proto.vim +} + +libprotoc() { + depends="" + pkgdesc="Runtime library for Protocol Buffer compiler" + + amove usr/lib/libprotoc.so.* +} + +protoc() { + depends="" + pkgdesc="Protocol buffer compiler binary and library" + + amove usr/bin/protoc* +} + +libprotobuf() { + depends="" + pkgdesc="Runtime library for C++ users of protocol buffers" + + amove usr/lib/libprotobuf.so.* +} + +lite() { + depends="" + pkgdesc="Runtime library for C++ users with 'lite runtime' setting of protocol buffers" + + amove usr/lib/libprotobuf-lite.so.* +} + +sha512sums=" +b93a4e0339ecbe085796de5b6c61feae35229d40db9019c043090bcaa483a1cce78a99487c5638482c68832fcede5579a0e5ec731221a88359b80db9bb6dc566 protobuf-23.4.tar.gz +0d46d105a0670ab5cfcb04ed534927a71613234a88efede0b20d426e1caaa708e6ff275a09c5dab7786fe26e69e0882f022b893302e4869006b4ac55fc6172e5 exclude.patch +16b8ee0e50dbb2144ddb83654a63e410b4218e667b6b8b77c7b6f9797508f63c3e8be0f9711841bb6ebbed0883cda2394b219a62b468240f65f4dac418b5a56e protoc-cmake.patch +0cb202a6151ae3746c09e85f2e4ce9abb0d810d4a3c84cb647fde407cf8d13894d3c9b340e06d7a3a85669da1899db265d26d8309d59249f841a40a66e045c83 ruby-fix-cflags.patch +b5070f8e150920c316130ba40f46c66eefddc634844f5d6b8ee11f6824a3707b3e74f68aa0612c16305bf096050214c6120e693225e07e0cea80e68a7830f863 skip-failing-tests.patch +850dc1d6fd3ea01f1689fd700ac35e7da0882092ab34c616702e01bdf4b5327b8ab27381ecf291431a94f54c89d31707a4a171929937e880543974cb64f9e685 soversion.patch +13514a456a50d7243baa23fe43586fc4544cda87b9e2a5afe9d2fac8afca8e8853f9b42232c3fff4c5cf2df443af32f944f451daa1d604d80fd03ee4e7abed3e trim-rakefile.patch +" diff --git a/user/protobuf/exclude.patch b/user/protobuf/exclude.patch new file mode 100644 index 0000000..9c63c0a --- /dev/null +++ b/user/protobuf/exclude.patch @@ -0,0 +1,40 @@ +don't install the utf8_range lib into disk. +also remove it from .pc/cmake, it's statically linked into protobuf and never needed on disk after +-- +diff --git a/cmake/install.cmake b/cmake/install.cmake +index e7eb210..73e1897 100644 +--- a/cmake/install.cmake ++++ b/cmake/install.cmake +@@ -4,7 +4,6 @@ foreach(_target IN LISTS protobuf_ABSL_USED_TARGETS) + string(REPLACE :: _ _modified_target ${_target}) + list(APPEND _pc_targets ${_modified_target}) + endforeach() +-list(APPEND _pc_targets "utf8_range") + + set(_protobuf_PC_REQUIRES "") + set(_sep "") +diff --git a/cmake/protobuf-config.cmake.in b/cmake/protobuf-config.cmake.in +index 44805c7..1a8d243 100644 +--- a/cmake/protobuf-config.cmake.in ++++ b/cmake/protobuf-config.cmake.in +@@ -4,7 +4,6 @@ include("${CMAKE_CURRENT_LIST_DIR}/protobuf-options.cmake") + # Depend packages + @_protobuf_FIND_ZLIB@ + @_protobuf_FIND_ABSL@ +-@_protobuf_FIND_UTF8_RANGE@ + + # Imported targets + include("${CMAKE_CURRENT_LIST_DIR}/protobuf-targets.cmake") +diff --git a/cmake/utf8_range.cmake b/cmake/utf8_range.cmake +index f411a8c..770f94c 100644 +--- a/cmake/utf8_range.cmake ++++ b/cmake/utf8_range.cmake +@@ -8,7 +8,7 @@ if (NOT TARGET utf8_range) + endif() + + set(utf8_range_ENABLE_INSTALL ${protobuf_INSTALL} CACHE BOOL "Set install") +- add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/third_party/utf8_range third_party/utf8_range) ++ add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/third_party/utf8_range third_party/utf8_range EXCLUDE_FROM_ALL) + include_directories(${CMAKE_CURRENT_SOURCE_DIR}/third_party/utf8_range) + endif () + diff --git a/user/protobuf/protoc-cmake.patch b/user/protobuf/protoc-cmake.patch new file mode 100644 index 0000000..4c1ae7a --- /dev/null +++ b/user/protobuf/protoc-cmake.patch @@ -0,0 +1,27 @@ +Patch-Source: https://github.com/protocolbuffers/protobuf/pull/13206 +-- +From 2e62ef1eaa2e712afc5f87aa2c55d478fe96230d Mon Sep 17 00:00:00 2001 +From: Antonio Rojas +Date: Wed, 5 Jul 2023 13:03:11 +0200 +Subject: [PATCH] Handle BUILD_TYPE=None in protobuf-module.cmake + +Fixes Protobuf_PROTOC_EXECUTABLE being undefined in that case. +--- + cmake/protobuf-module.cmake.in | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/cmake/protobuf-module.cmake.in b/cmake/protobuf-module.cmake.in +index 0bb05e38fad..e5b2b2e4b3a 100644 +--- a/cmake/protobuf-module.cmake.in ++++ b/cmake/protobuf-module.cmake.in +@@ -153,6 +153,10 @@ if(NOT Protobuf_PROTOC_EXECUTABLE AND TARGET protobuf::protoc) + get_target_property(Protobuf_PROTOC_EXECUTABLE protobuf::protoc + IMPORTED_LOCATION_NOCONFIG) + endif() ++ if(NOT EXISTS "${Protobuf_PROTOC_EXECUTABLE}") ++ get_target_property(Protobuf_PROTOC_EXECUTABLE protobuf::protoc ++ IMPORTED_LOCATION_NONE) ++ endif() + endif() + + # Version info variable diff --git a/user/protobuf/ruby-fix-cflags.patch b/user/protobuf/ruby-fix-cflags.patch new file mode 100644 index 0000000..24b1d57 --- /dev/null +++ b/user/protobuf/ruby-fix-cflags.patch @@ -0,0 +1,18 @@ +Using builder flags + +diff --git a/ruby/ext/google/protobuf_c/extconf.rb b/ruby/ext/google/protobuf_c/extconf.rb +index b7c439b..0bbc15c 100755 +--- a/ruby/ext/google/protobuf_c/extconf.rb ++++ b/ruby/ext/google/protobuf_c/extconf.rb +@@ -7,9 +7,9 @@ ext_name = "google/protobuf_c" + dir_config(ext_name) + + if RUBY_PLATFORM =~ /darwin/ || RUBY_PLATFORM =~ /linux/ || RUBY_PLATFORM =~ /freebsd/ +- $CFLAGS += " -std=gnu99 -O3 -DNDEBUG -fvisibility=hidden -Wall -Wsign-compare -Wno-declaration-after-statement" ++ $CFLAGS += " -std=gnu99 -DNDEBUG -fvisibility=hidden -Wall -Wsign-compare -Wno-declaration-after-statement" + else +- $CFLAGS += " -std=gnu99 -O3 -DNDEBUG" ++ $CFLAGS += " -std=gnu99 -DNDEBUG" + end + + if RUBY_PLATFORM =~ /linux/ diff --git a/user/protobuf/skip-failing-tests.patch b/user/protobuf/skip-failing-tests.patch new file mode 100644 index 0000000..be0c71b --- /dev/null +++ b/user/protobuf/skip-failing-tests.patch @@ -0,0 +1,99 @@ +diff --git a/src/google/protobuf/any_test.cc b/src/google/protobuf/any_test.cc +index 8b544d9..0f27dbe 100644 +--- a/src/google/protobuf/any_test.cc ++++ b/src/google/protobuf/any_test.cc +@@ -62,13 +62,6 @@ TEST(AnyTest, TestPackAndUnpack) { + EXPECT_EQ(12345, submessage.int32_value()); + } + +-TEST(AnyTest, TestPackFromSerializationExceedsSizeLimit) { +- protobuf_unittest::TestAny submessage; +- submessage.mutable_text()->resize(INT_MAX, 'a'); +- protobuf_unittest::TestAny message; +- EXPECT_FALSE(message.mutable_any_value()->PackFrom(submessage)); +-} +- + TEST(AnyTest, TestUnpackWithTypeMismatch) { + protobuf_unittest::TestAny payload; + payload.set_int32_value(13); +diff --git a/src/google/protobuf/arena_unittest.cc b/src/google/protobuf/arena_unittest.cc +index 4832cff..aa45a25 100644 +--- a/src/google/protobuf/arena_unittest.cc ++++ b/src/google/protobuf/arena_unittest.cc +@@ -1392,11 +1392,11 @@ TEST(ArenaTest, SpaceAllocated_and_Used) { + options.initial_block_size = arena_block.size(); + Arena arena_2(options); + EXPECT_EQ(1024, arena_2.SpaceAllocated()); +- EXPECT_EQ(0, arena_2.SpaceUsed()); ++// EXPECT_EQ(0, arena_2.SpaceUsed()); + EXPECT_EQ(1024, arena_2.Reset()); + Arena::CreateArray(&arena_2, 55); + EXPECT_EQ(1024, arena_2.SpaceAllocated()); +- EXPECT_EQ(Align8(55), arena_2.SpaceUsed()); ++// EXPECT_EQ(Align8(55), arena_2.SpaceUsed()); + EXPECT_EQ(1024, arena_2.Reset()); + } + +@@ -1460,11 +1460,11 @@ TEST(ArenaTest, BlockSizeSmallerThanAllocation) { + + *Arena::Create(&arena) = 42; + EXPECT_GE(arena.SpaceAllocated(), 8); +- EXPECT_EQ(8, arena.SpaceUsed()); ++// EXPECT_EQ(8, arena.SpaceUsed()); + + *Arena::Create(&arena) = 42; + EXPECT_GE(arena.SpaceAllocated(), 16); +- EXPECT_EQ(16, arena.SpaceUsed()); ++// EXPECT_EQ(16, arena.SpaceUsed()); + } + } + +diff --git a/src/google/protobuf/extension_set_unittest.cc b/src/google/protobuf/extension_set_unittest.cc +index ccd1c9b..f420da3 100644 +--- a/src/google/protobuf/extension_set_unittest.cc ++++ b/src/google/protobuf/extension_set_unittest.cc +@@ -871,17 +871,17 @@ TEST(ExtensionSetTest, SpaceUsedExcludingSelf) { + } while (0) + + TEST_REPEATED_EXTENSIONS_SPACE_USED(int32, int32_t, 101); +- TEST_REPEATED_EXTENSIONS_SPACE_USED(int64, int64_t, 102); ++ //TEST_REPEATED_EXTENSIONS_SPACE_USED(int64, int64_t, 102); + TEST_REPEATED_EXTENSIONS_SPACE_USED(uint32, uint32_t, 103); +- TEST_REPEATED_EXTENSIONS_SPACE_USED(uint64, uint64_t, 104); ++ //TEST_REPEATED_EXTENSIONS_SPACE_USED(uint64, uint64_t, 104); + TEST_REPEATED_EXTENSIONS_SPACE_USED(sint32, int32_t, 105); +- TEST_REPEATED_EXTENSIONS_SPACE_USED(sint64, int64_t, 106); ++ //TEST_REPEATED_EXTENSIONS_SPACE_USED(sint64, int64_t, 106); + TEST_REPEATED_EXTENSIONS_SPACE_USED(fixed32, uint32_t, 107); +- TEST_REPEATED_EXTENSIONS_SPACE_USED(fixed64, uint64_t, 108); ++ //TEST_REPEATED_EXTENSIONS_SPACE_USED(fixed64, uint64_t, 108); + TEST_REPEATED_EXTENSIONS_SPACE_USED(sfixed32, int32_t, 109); +- TEST_REPEATED_EXTENSIONS_SPACE_USED(sfixed64, int64_t, 110); ++ //TEST_REPEATED_EXTENSIONS_SPACE_USED(sfixed64, int64_t, 110); + TEST_REPEATED_EXTENSIONS_SPACE_USED(float, float, 111); +- TEST_REPEATED_EXTENSIONS_SPACE_USED(double, double, 112); ++ //TEST_REPEATED_EXTENSIONS_SPACE_USED(double, double, 112); + TEST_REPEATED_EXTENSIONS_SPACE_USED(bool, bool, true); + TEST_REPEATED_EXTENSIONS_SPACE_USED(nested_enum, int, + unittest::TestAllTypes::FOO); +diff --git a/src/google/protobuf/wire_format_unittest.inc b/src/google/protobuf/wire_format_unittest.inc +index 4c7d047..7906cfa 100644 +--- a/src/google/protobuf/wire_format_unittest.inc ++++ b/src/google/protobuf/wire_format_unittest.inc +@@ -1537,6 +1537,7 @@ TEST_F(Utf8ValidationTest, ParseRepeatedString) { + + // Test the old VerifyUTF8String() function, which may still be called by old + // generated code. ++#if 0 + TEST_F(Utf8ValidationTest, OldVerifyUTF8String) { + std::string data(kInvalidUTF8String); + +@@ -1555,7 +1556,7 @@ TEST_F(Utf8ValidationTest, OldVerifyUTF8String) { + WireFormat::SERIALIZE); + } + } +- ++#endif + + TEST(RepeatedVarint, Int32) { + RepeatedField v; diff --git a/user/protobuf/soversion.patch b/user/protobuf/soversion.patch new file mode 100644 index 0000000..25d6959 --- /dev/null +++ b/user/protobuf/soversion.patch @@ -0,0 +1,39 @@ +Patch-Source: https://gitlab.archlinux.org/archlinux/packaging/packages/protobuf/-/blob/e93df92fead2d46cc2825a866af3f402d498439c/soversion.patch +use an soversion that actually makes sense and not just the full pkgver +-- +diff --git a/cmake/libprotobuf-lite.cmake b/cmake/libprotobuf-lite.cmake +index 9b1de677b4f..276c99c489e 100644 +--- a/cmake/libprotobuf-lite.cmake ++++ b/cmake/libprotobuf-lite.cmake +@@ -30,6 +30,7 @@ if(protobuf_BUILD_SHARED_LIBS) + endif() + set_target_properties(libprotobuf-lite PROPERTIES + VERSION ${protobuf_VERSION} ++ SOVERSION ${protobuf_VERSION_MINOR} + OUTPUT_NAME ${LIB_PREFIX}protobuf-lite + DEBUG_POSTFIX "${protobuf_DEBUG_POSTFIX}") + add_library(protobuf::libprotobuf-lite ALIAS libprotobuf-lite) +diff --git a/cmake/libprotobuf.cmake b/cmake/libprotobuf.cmake +index aa3efc9a68a..0f34d20b97d 100644 +--- a/cmake/libprotobuf.cmake ++++ b/cmake/libprotobuf.cmake +@@ -33,6 +33,7 @@ if(protobuf_BUILD_SHARED_LIBS) + endif() + set_target_properties(libprotobuf PROPERTIES + VERSION ${protobuf_VERSION} ++ SOVERSION ${protobuf_VERSION_MINOR} + OUTPUT_NAME ${LIB_PREFIX}protobuf + DEBUG_POSTFIX "${protobuf_DEBUG_POSTFIX}") + add_library(protobuf::libprotobuf ALIAS libprotobuf) +diff --git a/cmake/libprotoc.cmake b/cmake/libprotoc.cmake +index 72b4a1abb92..91e8bbeb04e 100644 +--- a/cmake/libprotoc.cmake ++++ b/cmake/libprotoc.cmake +@@ -24,6 +24,7 @@ endif() + set_target_properties(libprotoc PROPERTIES + COMPILE_DEFINITIONS LIBPROTOC_EXPORTS + VERSION ${protobuf_VERSION} ++ SOVERSION ${protobuf_VERSION_MINOR} + OUTPUT_NAME ${LIB_PREFIX}protoc + DEBUG_POSTFIX "${protobuf_DEBUG_POSTFIX}") + add_library(protobuf::libprotoc ALIAS libprotoc) diff --git a/user/protobuf/trim-rakefile.patch b/user/protobuf/trim-rakefile.patch new file mode 100644 index 0000000..d8a3b87 --- /dev/null +++ b/user/protobuf/trim-rakefile.patch @@ -0,0 +1,79 @@ +diff --git a/ruby/Rakefile b/ruby/Rakefile +index c05e115..20144b7 100644 +--- a/ruby/Rakefile ++++ b/ruby/Rakefile +@@ -1,6 +1,4 @@ + require "rubygems" +-require "rubygems/package_task" +-require "rake/extensiontask" unless RUBY_PLATFORM == "java" + require "rake/testtask" + + spec = Gem::Specification.load("google-protobuf.gemspec") +@@ -95,57 +93,6 @@ else + FileUtils.cp(utf8_root+"/range2-neon.c", "ext/google/protobuf_c") + FileUtils.cp(utf8_root+"/range2-sse.c", "ext/google/protobuf_c") + end +- +- Rake::ExtensionTask.new("protobuf_c", spec) do |ext| +- unless RUBY_PLATFORM =~ /darwin/ +- # TODO: also set "no_native to true" for mac if possible. As is, +- # "no_native" can only be set if the RUBY_PLATFORM doing +- # cross-compilation is contained in the "ext.cross_platform" array. +- ext.no_native = true +- end +- ext.ext_dir = "ext/google/protobuf_c" +- ext.lib_dir = "lib/google" +- ext.cross_compile = true +- ext.cross_platform = [ +- 'x86-mingw32', 'x64-mingw32', 'x64-mingw-ucrt', +- 'x86_64-linux', 'x86-linux', +- 'x86_64-darwin', 'arm64-darwin', +- ] +- end +- +- task 'gem:java' do +- sh "rm Gemfile.lock" +- require 'rake_compiler_dock' +- # Specify the repo root as the working and mount directory to provide access +- # to the java directory +- repo_root = File.realdirpath File.join(Dir.pwd, '..') +- RakeCompilerDock.sh <<-"EOT", platform: 'jruby', rubyvm: :jruby, mountdir: repo_root, workdir: repo_root +- sudo apt-get install maven -y && \ +- cd java && mvn install -Dmaven.test.skip=true && cd ../ruby && \ +- bundle && \ +- IN_DOCKER=true rake compile gem +- EOT +- end +- +- task 'gem:windows' do +- sh "rm Gemfile.lock" +- require 'rake_compiler_dock' +- ['x86-mingw32', 'x64-mingw32', 'x64-mingw-ucrt', 'x86_64-linux', 'x86-linux'].each do |plat| +- RakeCompilerDock.sh <<-"EOT", platform: plat +- bundle && \ +- IN_DOCKER=true rake native:#{plat} pkg/#{spec.full_name}-#{plat}.gem RUBY_CC_VERSION=3.1.0:3.0.0:2.7.0:2.6.0 +- EOT +- end +- end +- +- if RUBY_PLATFORM =~ /darwin/ +- task 'gem:native' do +- system "rake genproto" +- system "rake cross native gem RUBY_CC_VERSION=3.1.0:3.0.0:2.7.0:2.6.0" +- end +- else +- task 'gem:native' => [:genproto, 'gem:windows', 'gem:java'] +- end + end + + task :genproto => genproto_output +@@ -154,9 +101,6 @@ task :clean do + sh "rm -f #{genproto_output.join(' ')}" + end + +-Gem::PackageTask.new(spec) do |pkg| +-end +- + # Skip build/genproto in Bazel builds, where we expect this to + # be done already. + Rake::TestTask.new(:test => ENV['BAZEL'] == 'true' ? [] : [:build, :genproto]) do |t| diff --git a/user/rm-extractor/APKBUILD b/user/rm-extractor/APKBUILD new file mode 100644 index 0000000..f581976 --- /dev/null +++ b/user/rm-extractor/APKBUILD @@ -0,0 +1,26 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=rm-extractor +_gittag=9d37e9437affea379dadb59e646a819b3b9147dd +pkgver=0.0.1 +pkgrel=4 +pkgdesc="Image extractor for reMarkable firmware files" +arch="noarch" +url="https://github.com/ddvk/remarkable-update" +license="MIT" +depends="py3-six py3-protobuf" +options="!check" # No testsuite +builddir="$srcdir/remarkable-update-$_gittag" +source="$pkgname-$pkgver.tar.gz::https://github.com/ddvk/remarkable-update/archive/$_gittag.tar.gz" + +package() { + install -vDm755 "$builddir"/extractor/extractor.py "$pkgdir"/usr/lib/rm-extractor/extractor.py + install -vDm644 "$builddir"/extractor/update_metadata.proto "$pkgdir"/usr/lib/rm-extractor/update_metadata.proto + install -vDm755 "$builddir"/extractor/update_metadata_pb2.py "$pkgdir"/usr/lib/rm-extractor/update_metadata_pb2.py + install -vdm755 "$pkgdir"/usr/bin + ln -s /usr/lib/rm-extractor/extractor.py "$pkgdir"/usr/bin/rm-extractor +} + +sha512sums=" +866c483950ee2cf7085e7d43d8752458d9aeb58b4361c05f50ac3118e87b295ff62b3d4288ad846eda5f93a4afe38891f6a9166f839c66f5ff0ab07afab6ae16 rm-extractor-0.0.1.tar.gz +" diff --git a/user/rm-utils/APKBUILD b/user/rm-utils/APKBUILD new file mode 100644 index 0000000..d8f2b68 --- /dev/null +++ b/user/rm-utils/APKBUILD @@ -0,0 +1,38 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=rm-utils +pkgver=0.0.1 +pkgrel=4 +pkgdesc="Utility files for reMarkable tablet" +arch="armv7" +url="http://www.davisr.me/projects/parabola-rm/" +license="GPL-3.0-only" +makedepends="musl-dev linux-rm-headers" +options="!check" # No testsuite +builddir="$srcdir" +source=" + battery-monitor.sh + epdc-init-auto.c + epdc-show-bitmap.c + xorg.conf +" + +build() { + $CC $CFLAGS epdc-init-auto.c -o epdc-init-auto + $CC $CFLAGS epdc-show-bitmap.c -o epdc-show-bitmap +} + +package() { + install -vDm755 battery-monitor.sh "$pkgdir"/usr/bin/battery-monitor + install -vDm755 epdc-show-bitmap -t "$pkgdir"/usr/bin/ + install -vDm755 epdc-init-auto -t "$pkgdir"/usr/bin/ + install -vDm644 xorg.conf -t "$pkgdir"/etc/defaults/ +} + +sha512sums=" +7f0e6cb276357983b76c37c81a91c0d278dbec16d8982a97618f2217ef5e4d706211d921af6c79db3aad912d50aaed8cf5ce67f52a1081f61585eb97322c8deb battery-monitor.sh +f145d6af541828e69217a73f7b848f7fe57cce37426e15469a1d6a5540604f4078d4cd1f67e69e77b961b608a7b8e2930e1e82b13fe9dd181361e361895a66be epdc-init-auto.c +409744c4bbcac462c38add2b19d3b433e44cb326905fe3af240931e27bb2b71b14696229c46187bf7c060f83d77920376b5c6161f62949a2fa2c0a5464753cc0 epdc-show-bitmap.c +e14a61751e4c830652e7a849b9d596c6bc213fed87ba3f9f7c3df0d5fe35ddf28bde7de2fa977c0321639503ceff5abffd0d856380eacce24389fd50eaf3372a xorg.conf +" diff --git a/user/rm-utils/battery-monitor.sh b/user/rm-utils/battery-monitor.sh new file mode 100644 index 0000000..fb5dbc7 --- /dev/null +++ b/user/rm-utils/battery-monitor.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +# +# battery-monitor.sh +# Prints the state of charge of the tablet's battery +# +# Parabola-rM is a free operating system for the reMarakble tablet. +# Copyright (C) 2020 +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. + +# Path for Linux 4.9 +battpath="/sys/class/power_supply/bq27441-0" + +chargenow="$(cat $battpath/charge_now)" +chargefull="$(cat $battpath/charge_full)" +status="$(cat $battpath/status)" + +chargepct="$(echo $chargenow $chargefull \ + | awk '{printf "%f", $1 / $2 * 100}' \ + | cut -d'.' -f1)" +symbol="" +if [[ "Charging" == "$status" ]]; then + symbol=$'\u26a1' # Lightning symbol +fi + +echo "${symbol}${chargepct}%" diff --git a/user/rm-utils/epdc-init-auto.c b/user/rm-utils/epdc-init-auto.c new file mode 100644 index 0000000..069ea9f --- /dev/null +++ b/user/rm-utils/epdc-init-auto.c @@ -0,0 +1,126 @@ +/* + epdc-init-auto.c + Initializes the EPDC framebuffer into a deferred-IO automatic-update + mode + + Parabola-rM is a free operating system for the reMarakble tablet. + Copyright (C) 2020 Davis Remmel + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include +#include +#include +#include +#include +#include +#include +#include + +int main() +{ + int ret; + int fb = open("/dev/fb0", O_RDWR); + struct fb_var_screeninfo vinfo; + ret = ioctl(fb, FBIOGET_VSCREENINFO, &vinfo); + if (0 != ret) { + fprintf(stderr, "FBIOGET_VSCREENINFO failed with error " + "%d, aborting\n", ret); + return 1; + } + + vinfo.xres = 1872; + vinfo.yres = 1404; + vinfo.pixclock = 160000000; + vinfo.left_margin = 32; + vinfo.right_margin = 326; + vinfo.upper_margin = 4; + vinfo.lower_margin = 12; + vinfo.hsync_len = 44; + vinfo.vsync_len = 1; + vinfo.sync = 0; + vinfo.vmode = FB_VMODE_NONINTERLACED; + vinfo.accel_flags = 0; + vinfo.activate = FB_ACTIVATE_FORCE; + + // Put screen info. Sometimes this fails when trying to set the + // pixclock. This may be a bug in the driver's arithmetic. + ret = ioctl(fb, FBIOPUT_VSCREENINFO, &vinfo); + if (0 != ret) { + fprintf(stderr, "FBIOPUT_VSCREENINFO failed with error " + "%d, attempting to reset pixclock\n", ret); + vinfo.pixclock = 6250; + ioctl(fb, FBIOPUT_VSCREENINFO, &vinfo); + vinfo.pixclock = 160000000; + ret = ioctl(fb, FBIOPUT_VSCREENINFO, &vinfo); + if (0 != ret) { + fprintf(stderr, "FBIOPUT_VSCREENINFO failed " + "with error %d, aborting\n", ret); + return 1; + } + } + + // Pull the screeninfo agian + ret = ioctl(fb, FBIOGET_VSCREENINFO, &vinfo); + if (0 != ret) { + fprintf(stderr, "FBIOGET_VSCREENINFO failed with error " + "%d, aborting\n", ret); + return 1; + } + + printf("x:%d y:%d activate:%d bpp:%d rotate:%d hsync_len:%d" + "vsync_len: %d sync:%d\n", + vinfo.xres, vinfo.yres, vinfo.activate, + vinfo.bits_per_pixel, vinfo.rotate, vinfo.hsync_len, + vinfo.vsync_len, vinfo.sync); + + struct fb_fix_screeninfo finfo; + ret = ioctl(fb, FBIOGET_FSCREENINFO, &finfo); + if (0 != ret) { + fprintf(stderr, "FBIOGET_FSCREENINFO failed with error " + "%d, aborting\n", ret); + return 1; + } + + // In case the EPDC wasn't accessible + ret = ioctl(fb, MXCFB_ENABLE_EPDC_ACCESS); + if (0 != ret) { + fprintf(stderr, "MXCFB_ENABLE_EPDC_ACCESS failed with " + "error %d, aborting\n", ret); + return 1; + } + + // Set auto update mode + __u32 aumode = AUTO_UPDATE_MODE_AUTOMATIC_MODE; + ret = ioctl(fb, MXCFB_SET_AUTO_UPDATE_MODE, &aumode); + if (0 != ret) { + fprintf(stderr, "MXCFB_SET_AUTO_UPDATE_MODE failed " + "with error %d, aborting\n", ret); + return 1; + } + + // Queue-and-merge is best-performing + __u32 uscheme = UPDATE_SCHEME_QUEUE_AND_MERGE; + ret = ioctl(fb, MXCFB_SET_UPDATE_SCHEME, &uscheme); + if (0 != ret) { + fprintf(stderr, "MXCFB_SET_UPDATE_SCHEME failed with " + "error %d, aborting\n", ret); + return 1; + } + + close(fb); + return 0; +} + diff --git a/user/rm-utils/epdc-show-bitmap.c b/user/rm-utils/epdc-show-bitmap.c new file mode 100644 index 0000000..c42bf30 --- /dev/null +++ b/user/rm-utils/epdc-show-bitmap.c @@ -0,0 +1,184 @@ +/* +epdc-show-bitmap.c +Displays a raw image to the EPDC framebuffer + +Parabola-rM is a free operating system for the reMarakble tablet. +Copyright (C) 2020 Davis Remmel + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) { + if (argc < 2) { + printf("Must pass an image as an argument.\n"); + return 1; + } + + int ret; + int fb = open("/dev/fb0", O_RDWR); + struct fb_var_screeninfo vinfo; + ret = ioctl(fb, FBIOGET_VSCREENINFO, &vinfo); + if (0 != ret) { + printf("FBIOGET_VSCREENINFO failed with error %d" + ", aborting\n", ret); + return 1; + } + + vinfo.xres = 1872; + vinfo.yres = 1404; + vinfo.pixclock = 160000000; + vinfo.left_margin = 32; + vinfo.right_margin = 326; + vinfo.upper_margin = 4; + vinfo.lower_margin = 12; + vinfo.hsync_len = 44; + vinfo.vsync_len = 1; + vinfo.sync = 0; + vinfo.vmode = FB_VMODE_NONINTERLACED; + vinfo.accel_flags = 0; + vinfo.activate = FB_ACTIVATE_FORCE; + + // Put screen info. Sometimes this fails when trying to set the + // pixclock. This may be a bug in the driver's arithmetic. + ret = ioctl(fb, FBIOPUT_VSCREENINFO, &vinfo); + if (0 != ret) { + fprintf(stderr, "FBIOPUT_VSCREENINFO failed with error " + "%d, attempting To reset pixclock\n", ret); + vinfo.pixclock = 6250; + ioctl(fb, FBIOPUT_VSCREENINFO, &vinfo); + vinfo.pixclock = 160000000; + ret = ioctl(fb, FBIOPUT_VSCREENINFO, &vinfo); + if (0 != ret) { + fprintf(stderr, "FBIOPUT_VSCREENINFO failed " + "with error %d, aborting\n", ret); + return 1; + } + } + + printf("x:%d y:%d activate:%d bpp:%d rotate:%d hsync_len:%d" + "vsync_len: %d sync:%d\n", + vinfo.xres, vinfo.yres, vinfo.activate, + vinfo.bits_per_pixel, vinfo.rotate, vinfo.hsync_len, + vinfo.vsync_len, vinfo.sync); + + struct fb_fix_screeninfo finfo; + ret = ioctl(fb, FBIOGET_FSCREENINFO, &finfo); + if (0 != ret) { + fprintf(stderr, "FBIOGET_FSCREENINFO failed with error " + "%d, aborting\n", ret); + return 1; + } + + // In case the EPDC wasn't accessible + ret = ioctl(fb, MXCFB_ENABLE_EPDC_ACCESS); + if (0 != ret) { + fprintf(stderr, "MXCFB_ENABLE_EPDC_ACCESS failed with " + "error %d, aborting\n", ret); + return 1; + } + + // Set to partial mode to control update parameters + __u32 aumode = AUTO_UPDATE_MODE_REGION_MODE; + ret = ioctl(fb, MXCFB_SET_AUTO_UPDATE_MODE, &aumode); + if (0 != ret) { + fprintf(stderr, "MXCFB_SET_AUTO_UPDATE_MODE failed " + "with error %d, aborting\n", ret); + return 1; + } + + + // No artifacts in display output + __u32 uscheme = UPDATE_SCHEME_SNAPSHOT; + ret = ioctl(fb, MXCFB_SET_UPDATE_SCHEME, &uscheme); + if (0 != ret) { + fprintf(stderr, "MXCFB_SET_UPDATE_SCHEME failed with " + "error %d, aborting\n", ret); + return 1; + } + + // Set up update (same region for all writes, gets reused) + struct mxcfb_update_data bupdate; + bupdate.update_region.left = 0; + bupdate.update_region.top = 0; + bupdate.update_region.width = 1872; + bupdate.update_region.height = 1404; + bupdate.waveform_mode = WAVEFORM_MODE_AUTO; + bupdate.update_mode = UPDATE_MODE_FULL; + bupdate.update_marker = 0; + bupdate.temp = TEMP_USE_AMBIENT; + bupdate.flags = 0; + + struct mxcfb_update_marker_data updm; + updm.update_marker = 0; + + // mmap to framebuffer + int buflength = vinfo.yres_virtual * finfo.line_length; + printf("buflength %d\n", buflength); + char * region = mmap(0, buflength, PROT_READ | PROT_WRITE, + MAP_SHARED, fb, (off_t)0); + if (region == MAP_FAILED) { + fprintf(stderr, "map failed!\n"); + return 1; + } + + // Write black + memset(region, 0x00, buflength); + ioctl(fb, MXCFB_SEND_UPDATE, &bupdate); + ioctl(fb, MXCFB_WAIT_FOR_UPDATE_COMPLETE, &updm); + + // Write white + memset(region, 0xff, buflength); + ioctl(fb, MXCFB_SEND_UPDATE, &bupdate); + ioctl(fb, MXCFB_WAIT_FOR_UPDATE_COMPLETE, &updm); + + // Write image + FILE *pattern = fopen(argv[1], "rb"); + fseek(pattern, 0, SEEK_END); + long psize = ftell(pattern); + printf("psize is %d\n", psize); + fseek(pattern, 0, SEEK_SET); + + if (psize != buflength) { + fprintf(stderr, "Image must match framebuffer size\n"); + return 1; + } + + char *buffer = malloc(psize); + fread(buffer, psize, 1, pattern); + fclose(pattern); + + memcpy(region, buffer, psize); + ret = ioctl(fb, MXCFB_SEND_UPDATE, &bupdate); + ioctl(fb, MXCFB_WAIT_FOR_UPDATE_COMPLETE, &updm); + if (0 != ret) { + fprintf(stderr, "MXCFB_SEND_UPDATE failed with error " + "%d, aborting\n", ret); + return 1; + } + + close(fb); + return 0; +} diff --git a/user/rm-utils/xorg.conf b/user/rm-utils/xorg.conf new file mode 100644 index 0000000..8ebf064 --- /dev/null +++ b/user/rm-utils/xorg.conf @@ -0,0 +1,62 @@ +Section "ServerLayout" + Identifier "reMarkable Tablet RM100" + Screen 0 "Screen0" + InputDevice "wacom" "CorePointer" +EndSection + +Section "ServerFlags" + Option "BlankTime" "0" + Option "StandbyTime" "0" + Option "SuspendTime" "0" + Option "OffTime" "0" +EndSection + +Section "Monitor" + Identifier "Monitor0" + DisplaySize 210 158 # mm, sets DPI + Modeline "1872x1404_30.00" 104.26 1872 1960 2152 2432 1404 1405 \ + 1408 1429 -HSync +Vsync + Option "PreferredMode" "1872x1404_30.00" +EndSection + +Section "Screen" + Identifier "Screen0" + Monitor "Monitor0" + Device "epdc0" + DefaultDepth 16 + SubSection "Display" + Depth 16 + Modes "1872x1404_30.00" + EndSubSection +EndSection + +Section "Device" + Identifier "epdc0" + Driver "fbdev" + Option "fbdev" "/dev/fb0" + Option "Rotate" "CW" +EndSection + +Section "InputDevice" + Identifier "wacom" + Driver "evdev" + Option "Protocol" "Auto" + Option "Device" "/dev/input/event0" + Option "SwapAxes" "1" + Option "InvertY" "1" +EndSection + +Section "InputClass" + Identifier "touchscreen" + MatchIsTouchscreen "on" + MatchDevicePath "/dev/input/event1" + Driver "libinput" + Option "CalibrationMatrix" "-1 0 1 0 -1 1 0 0 1" # Rot 180 +EndSection + +Section "InputClass" + Identifier "facialbuttons" + MatchIsKeyboard "on" + MatchDevicePath "/dev/input/event2" + Driver "libinput" +EndSection diff --git a/user/rmfakecloud/APKBUILD b/user/rmfakecloud/APKBUILD index d4ecc74..1bdaac4 100644 --- a/user/rmfakecloud/APKBUILD +++ b/user/rmfakecloud/APKBUILD @@ -2,16 +2,15 @@ # Contributor: Antoine Martin (ayakael) pkgname=rmfakecloud -pkgver=0.0.27 +pkgver=0.0.17 _gittag=v$pkgver pkgrel=0 pkgdesc="A selfhosted cloud for the Remarkable Tablet" url="https://github.com/ddvk/rmfakecloud" -# armv7: oom -arch="all !armv7" +arch="all" license="AGPL-3.0-only" makedepends="go yarn" -options="chmod-clean net" +options="chmod-clean" source=" $pkgname-$pkgver.tar.gz::https://github.com/ddvk/rmfakecloud/archive/v$pkgver.tar.gz rmfakecloud.conf @@ -19,6 +18,20 @@ source=" " subpackages="$pkgname-openrc" +case "$CTARGET_ARCH" in + aarch64)export GOARCH="arm64" ;; + armel) export GOARCH="arm" GOARM=5 ;; + armhf) export GOARCH="arm" GOARM=6 ;; + armv7) export GOARCH="arm" GOARM=7 ;; + s390x) export GOARCH="s390x" ;; + x86) export GOARCH="386" ;; + x86_64) export GOARCH="amd64" ;; + ppc64) export GOARCH="ppc64" ;; + ppc64le) export GOARCH="ppc64le" ;; + riscv64) export GOARCH="riscv64" ;; + *) export GOARCH="unsupported";; +esac + build() { export GOPATH="$srcdir/go" export LDFLAGS="$LDFLAGS -X main.version=$pkgver" @@ -38,7 +51,7 @@ package() { install -Dm755 "$srcdir"/rmfakecloud.openrc "$pkgdir"/etc/init.d/rmfakecloud } sha512sums=" -b215295c8779f9820e9751e5cbfb8804d6cdeb0d71ffaa60d46fd803760e63227352f55a8b5a2e75d990b20a6a19c43a4ffaa03a1857e6fb37990a8b191a3ea2 rmfakecloud-0.0.27.tar.gz +2836364ba7a0c70b33f5914e357a87fb681275268a1cd5e1b6eba91037017c57f6a24b1bcecf9daa423c2588128ce591c2066d8af1d89eedccca231d24671748 rmfakecloud-0.0.17.tar.gz d5677cef282085cd6642a034dd258ffa294862aeb0ce81d6485a524a15564849bc4eb90a9d1fa4dbcf4eab69dcd893302aa06493fc8fad74d69200c2bdf246c0 rmfakecloud.conf 891d0945886796132f951293e081046334857563b4ebae28a3aa5b6bc37768767c49ce102de645ed8340af2518de606be8bf6ecafeb6d189dd937970aa3e6498 rmfakecloud.openrc " diff --git a/unmaintained/rstudio-desktop/12317_support-system-yaml-cpp.patch b/user/rstudio-desktop/12317_support-system-yaml-cpp.patch similarity index 100% rename from unmaintained/rstudio-desktop/12317_support-system-yaml-cpp.patch rename to user/rstudio-desktop/12317_support-system-yaml-cpp.patch diff --git a/unmaintained/rstudio-desktop/APKBUILD b/user/rstudio-desktop/APKBUILD similarity index 99% rename from unmaintained/rstudio-desktop/APKBUILD rename to user/rstudio-desktop/APKBUILD index 27b21ce..958ac4b 100644 --- a/unmaintained/rstudio-desktop/APKBUILD +++ b/user/rstudio-desktop/APKBUILD @@ -7,14 +7,14 @@ _gittag=v2023.03.0+386 _panmirrortag=aea3027882718af657d60221818c3ff35f413219 pkgrel=0 pkgdesc="A powerful and productive integrated development environment (IDE) for R programming language" -arch="x86_64" +#arch="x86_64" url="https://www.rstudio.com/products/rstudio/" license='AGPL3' options="!check" # No testsuite # missing quarto-cli depends=" R>=3.0.1 - clang15 + clang14 hunspell-en libldap lxqt-config @@ -23,7 +23,6 @@ depends=" sqlite " makedepends=" - bash apache-ant boost-dev cmake>=3.1.0 diff --git a/unmaintained/rstudio-desktop/cran_multithread.patch b/user/rstudio-desktop/cran_multithread.patch similarity index 100% rename from unmaintained/rstudio-desktop/cran_multithread.patch rename to user/rstudio-desktop/cran_multithread.patch diff --git a/unmaintained/rstudio-desktop/desktop-main-skip-nosandbox-on-musl.patch b/user/rstudio-desktop/desktop-main-skip-nosandbox-on-musl.patch similarity index 100% rename from unmaintained/rstudio-desktop/desktop-main-skip-nosandbox-on-musl.patch rename to user/rstudio-desktop/desktop-main-skip-nosandbox-on-musl.patch diff --git a/unmaintained/rstudio-desktop/filepath-use-unistd.patch b/user/rstudio-desktop/filepath-use-unistd.patch similarity index 100% rename from unmaintained/rstudio-desktop/filepath-use-unistd.patch rename to user/rstudio-desktop/filepath-use-unistd.patch diff --git a/unmaintained/rstudio-desktop/nodejs-external.patch b/user/rstudio-desktop/nodejs-external.patch similarity index 100% rename from unmaintained/rstudio-desktop/nodejs-external.patch rename to user/rstudio-desktop/nodejs-external.patch diff --git a/unmaintained/rstudio-desktop/qt.conf b/user/rstudio-desktop/qt.conf similarity index 100% rename from unmaintained/rstudio-desktop/qt.conf rename to user/rstudio-desktop/qt.conf diff --git a/unmaintained/rstudio-desktop/sessionhistoryarchive-use-ctime.patch b/user/rstudio-desktop/sessionhistoryarchive-use-ctime.patch similarity index 100% rename from unmaintained/rstudio-desktop/sessionhistoryarchive-use-ctime.patch rename to user/rstudio-desktop/sessionhistoryarchive-use-ctime.patch diff --git a/user/sane/APKBUILD b/user/sane/APKBUILD new file mode 100644 index 0000000..1eb5756 --- /dev/null +++ b/user/sane/APKBUILD @@ -0,0 +1,162 @@ +# Contributor: Fabio Riga +# Contributor: Valery Kartel +# Maintainer: Valery Kartel +pkgname=sane +_pkgname=sane-backends +pkgver=1.1.1 +pkgrel=3 +pkgdesc="Scanner Access Now Easy - universal scanner interface" +url="http://www.sane-project.org/" +arch="all" +license="GPL-2.0-or-later GPL-2.0-or-later-with-sane-exception Public-Domain" +makedepends="diffutils file libtool libusb-dev v4l-utils-dev net-snmp-dev + avahi-dev curl-dev libpng-dev libjpeg-turbo-dev tiff-dev libgphoto2-dev + poppler-dev linux-headers libieee1284-dev libxml2-dev" +install="$pkgname-saned.pre-install $pkgname.pre-install" +pkgusers="saned" +pkggroups="scanner" +_backends="abaton agfafocus apple artec artec_eplus48u as6e avision bh canon + canon630u canon_dr canon_pp cardscan coolscan coolscan2 coolscan3 dc25 + dc210 dc240 dell1600n_net dmc epjitsu epson epson2 epsonds escl fujitsu + genesys gphoto2 gt68xx hp hp3500 hp3900 hp4200 hp5400 hp5590 hpsj5s + hpljm1005 hs2p ibm kodak kodakaio kvs1025 kvs20xx kvs40xx leo lexmark + ma1509 magicolor matsushita microtek microtek2 mustek mustek_pp mustek_usb + mustek_usb2 nec net niash p5 pie pieusb pixma plustek plustek_pp ricoh ricoh2 + rts8891 s9036 sceptre sharp sm3600 sm3840 snapscan sp15c st400 stv680 + tamarack teco1 teco2 teco3 test u12 umax umax_pp umax1220u v4l + xerox_mfp" + +case "$CARCH" in + x86) + options="$options !check" + _backends="$_backends qcam canon_lide70" + ;; + x86_64) + _backends="$_backends qcam canon_lide70" + ;; +esac + +_pkgdesc_dell1600n_net="SANE backend for Dell 1600n that supports colour and monochrome scans over ethernet, usb not supported" +for _backend in $_backends; do + subpackages="$subpackages $pkgname-backend-$_backend:_backend" +done +subpackages="$pkgname-doc $pkgname-dev $subpackages $pkgname-utils $pkgname-saned + $pkgname-udev::noarch $_pkgname::noarch" +source="https://gitlab.com/sane-project/backends/uploads/7d30fab4e115029d91027b6a58d64b43/sane-backends-$pkgver.tar.gz + $pkgname-fix-tests.patch::https://gitlab.com/sane-project/backends/-/commit/edfc90450ee06149537fadb3095ba4b215c5c4fa.patch + saned.initd + include.patch + pidfile.patch + check.patch + sane-backends-no-avahi-thread.patch + " +builddir="$srcdir"/$_pkgname-$pkgver + +# secfixes: +# 1.0.30-r0: +# - CVE-2020-12861 +# - CVE-2020-12862 +# - CVE-2020-12863 +# - CVE-2020-12864 +# - CVE-2020-12865 +# - CVE-2020-12866 +# - CVE-2020-12867 + +build() { + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --with-docdir=/usr/share/doc/$pkgname \ + --with-usb \ + --enable-avahi \ + --disable-rpath \ + --disable-locking + make +} + +check() { + make check +} + +package() { + make DESTDIR="$pkgdir" install + echo -n "" > "$pkgdir"/etc/$pkgname.d/dll.conf + install -Dm644 backend/dll.aliases "$pkgdir"/etc/$pkgname.d/dll.aliases +} + +doc() { + default_doc + mkdir -p "$subpkgdir"/usr/share/licenses/$_pkgname + mv "$subpkgdir"/usr/share/doc/$_pkgname/LICENSE \ + "$subpkgdir"/usr/share/licenses/$_pkgname +} + +saned() { + local name=${subpkgname#$pkgname-} + pkgdesc="$pkgdesc (network scanner server)" + mkdir -p "$subpkgdir"/etc/$pkgname.d "$subpkgdir"/usr + mv "$pkgdir"/etc/$pkgname.d/$name.conf "$subpkgdir"/etc/$pkgname.d + mv "$pkgdir"/usr/sbin "$subpkgdir"/usr/ + install -Dm755 "$srcdir"/$name.initd "$subpkgdir"/etc/init.d/$name +} + +utils() { + pkgdesc="$pkgdesc (utilities)" + mkdir -p "$subpkgdir"/usr + mv "$pkgdir"/usr/bin "$subpkgdir"/usr + rm -fr "$pkgdir"/usr/share +} + +udev() { + pkgdesc="$pkgdesc (udev rules)" + install_if="$pkgname=$pkgver-r$pkgrel udev" + install -Dm644 "$builddir"/tools/udev/lib$pkgname.rules \ + "$subpkgdir"/usr/lib/udev/rules.d/49-$pkgname.rules + sed -i 's|NAME="%k", ||g' "$subpkgdir"/usr/lib/udev/rules.d/49-$pkgname.rules +} + +backends() { + local _backend; + pkgdesc="$pkgdesc (metapackage)" + depends="$pkgname-utils $pkgname-saned" + for _backend in $_backends; do + [ "$_backend" = "test" ] && continue + depends="$depends $pkgname-backend-$_backend" + done + mkdir -p "$subpkgdir" +} + +_backend() { + local name=${subpkgname#$pkgname-backend-} + depends="$pkgname" + pkgdesc=$(eval echo \$_pkgdesc_$name) + if [ ! "$pkgdesc" ]; then + # cut description from man-page + pkgdesc=$(tr '\n' ' ' < "$builddir"/doc/$pkgname-$name.man) + pkgdesc=${pkgdesc#*\- } + pkgdesc=${pkgdesc%% .SH *}; + fi + mkdir -p "$subpkgdir"/usr/lib/$pkgname \ + "$subpkgdir"/etc/$pkgname.d/dll.d + mv "$pkgdir"/usr/lib/$pkgname/lib$pkgname-$name.* \ + "$subpkgdir"/usr/lib/$pkgname + echo "$name" > "$subpkgdir"/etc/$pkgname.d/dll.d/$name + if [ -f "$pkgdir"/etc/$pkgname.d/$name.conf ]; then + mv "$pkgdir"/etc/$pkgname.d/$name.conf \ + "$subpkgdir"/etc/$pkgname.d + fi + if [ -f "$pkgdir"/usr/bin/$name ]; then + mkdir -p "$subpkgdir"/usr/bin + mv "$pkgdir"/usr/bin/$name "$subpkgdir"/usr/bin + fi +} + +sha512sums=" +25bd9f90d550cfe6a6d01c48e83716a53f4b0e3a294287e455ecb5e5b80c8fe1699f45c6c87f694475cceb85745c70597e18a7b1094669d5091c5fb183dfe94d sane-backends-1.1.1.tar.gz +f4187409a85dbdb95213948fcc1bb34cf319a3a5ae34093d1e9e7983dfc89336c75132713e6f3113ad7ef2b0ed78bdc0c6e031796fca7004787776f46c742ec6 sane-fix-tests.patch +0a06eaa28b345202f2bdf8361e06f843bb7a010b7d8f80132f742672c94249c43f64031cefa161e415e2e2ab3a53b23070fb63854283f9e040f5ff79394ac7d1 saned.initd +1779ff8beb1ba5f9238c25d819a7f0045f7e257c19b511315feb85650e445ca86450a9e1d7ff8650499d3dae808589a6c2e358d5f3f39a3f40ce4999179b86d6 include.patch +09505943f9441854a6c333f19e2535b4a646a8cc060fe82c6261e7d29c72773ebe98d43a91acc951f4336a3c8b4c84ab7c7b0763426136b4b59d9546bc2fa8c0 pidfile.patch +cfa327209efd9a2a2db7cbcf571852959823aaa19b43d5f6415834cd5ae38b6324ecae16779f6f896aa0d7ac890fe23244100b7d6a68e5e9d52cd38ec82bfac8 check.patch +6e6b6336203ee6d1ac96ed2d742e181fb65e8d93386b76d70b6359afbcce98343d89ec8b2b611261f79901779a2999f9262c3f85898bd15c74b00348e0cd3cd7 sane-backends-no-avahi-thread.patch +" diff --git a/user/sane/check.patch b/user/sane/check.patch new file mode 100644 index 0000000..afbc7ef --- /dev/null +++ b/user/sane/check.patch @@ -0,0 +1,11 @@ +--- a/testsuite/sanei/Makefile.in ++++ b/testsuite/sanei/Makefile.in +@@ -77,7 +77,7 @@ + POST_UNINSTALL = : + build_triplet = @build@ + host_triplet = @host@ +-check_PROGRAMS = sanei_usb_test$(EXEEXT) test_wire$(EXEEXT) \ ++check_PROGRAMS = test_wire$(EXEEXT) \ + sanei_check_test$(EXEEXT) sanei_config_test$(EXEEXT) \ + sanei_constrain_test$(EXEEXT) + subdir = testsuite/sanei diff --git a/user/sane/include.patch b/user/sane/include.patch new file mode 100644 index 0000000..518d3b4 --- /dev/null +++ b/user/sane/include.patch @@ -0,0 +1,11 @@ +--- a/include/sane/sane.h ++++ b/include/sane/sane.h +@@ -16,6 +16,8 @@ + #ifndef sane_h + #define sane_h + ++#include ++ + #ifdef __cplusplus + extern "C" { + #endif diff --git a/user/sane/pidfile.patch b/user/sane/pidfile.patch new file mode 100644 index 0000000..457755b --- /dev/null +++ b/user/sane/pidfile.patch @@ -0,0 +1,11 @@ +--- a/frontend/saned.c ++++ b/frontend/saned.c +@@ -224,7 +224,7 @@ + int numchildren; + + #define SANED_CONFIG_FILE "saned.conf" +-#define SANED_PID_FILE "/var/run/saned.pid" ++#define SANED_PID_FILE "/run/saned/saned.pid" + + #define SANED_SERVICE_NAME "sane-port" + #define SANED_SERVICE_PORT 6566 diff --git a/user/sane/sane-backends-no-avahi-thread.patch b/user/sane/sane-backends-no-avahi-thread.patch new file mode 100644 index 0000000..149a305 --- /dev/null +++ b/user/sane/sane-backends-no-avahi-thread.patch @@ -0,0 +1,48 @@ +diff --git a/backend/net.c.orig b/backend/net.c +index 7c4aae9..0adfbc2 100644 +--- a/backend/net.c.orig ++++ b/backend/net.c +@@ -1043,12 +1043,12 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) + continue; + } + #if WITH_AVAHI +- avahi_threaded_poll_lock (avahi_thread); ++ if(avahi_thread) avahi_threaded_poll_lock (avahi_thread); + #endif /* WITH_AVAHI */ + DBG (2, "sane_init: trying to add %s\n", device_name); + add_device (device_name, 0); + #if WITH_AVAHI +- avahi_threaded_poll_unlock (avahi_thread); ++ if(avahi_thread) avahi_threaded_poll_unlock (avahi_thread); + #endif /* WITH_AVAHI */ + } + +@@ -1094,12 +1094,12 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) + continue; + #endif /* ENABLE_IPV6 */ + #if WITH_AVAHI +- avahi_threaded_poll_lock (avahi_thread); ++ if(avahi_thread) avahi_threaded_poll_lock (avahi_thread); + #endif /* WITH_AVAHI */ + DBG (2, "sane_init: trying to add %s\n", host); + add_device (host, 0); + #if WITH_AVAHI +- avahi_threaded_poll_unlock (avahi_thread); ++ if(avahi_thread) avahi_threaded_poll_unlock (avahi_thread); + #endif /* WITH_AVAHI */ + } + free (copy); +@@ -1517,11 +1517,11 @@ sane_open (SANE_String_Const full_name, SANE_Handle * meta_handle) + "sane_open: device %s not found, trying to register it anyway\n", + nd_name); + #if WITH_AVAHI +- avahi_threaded_poll_lock (avahi_thread); ++ if(avahi_thread) avahi_threaded_poll_lock (avahi_thread); + #endif /* WITH_AVAHI */ + status = add_device (nd_name, &dev); + #if WITH_AVAHI +- avahi_threaded_poll_unlock (avahi_thread); ++ if(avahi_thread) avahi_threaded_poll_unlock (avahi_thread); + #endif /* WITH_AVAHI */ + if (status != SANE_STATUS_GOOD) + { diff --git a/user/sane/sane-saned.pre-install b/user/sane/sane-saned.pre-install new file mode 100644 index 0000000..caad990 --- /dev/null +++ b/user/sane/sane-saned.pre-install @@ -0,0 +1,5 @@ +#!/bin/sh + +adduser -SDH -h /run/saned -s /sbin/nologin -G scanner -g saned saned 2>/dev/null + +exit 0 diff --git a/user/sane/sane.pre-install b/user/sane/sane.pre-install new file mode 100644 index 0000000..b75c867 --- /dev/null +++ b/user/sane/sane.pre-install @@ -0,0 +1,5 @@ +#!/bin/sh + +addgroup -S scanner 2>/dev/null + +exit 0 diff --git a/user/sane/saned.initd b/user/sane/saned.initd new file mode 100644 index 0000000..6482073 --- /dev/null +++ b/user/sane/saned.initd @@ -0,0 +1,14 @@ +#!/sbin/openrc-run + +description="SANE network scanner server" + +owner=saned +pidfile=/run/saned/saned.pid +cfgfile=/etc/sane.d/saned.conf +command=/usr/sbin/saned +command_args="-a $owner" +required_files="$cfgfile" + +start_pre() { + checkpath -dm755 -o $owner ${pidfile%/*} +} diff --git a/user/scanservjs/APKBUILD b/user/scanservjs/APKBUILD index 9effbf6..4aeb67d 100644 --- a/user/scanservjs/APKBUILD +++ b/user/scanservjs/APKBUILD @@ -1,7 +1,8 @@ -# Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + pkgname=scanservjs -pkgver=3.0.4 +pkgver=3.0.3 pkgrel=0 pkgdesc="SANE scanner nodejs web ui" arch="noarch" @@ -62,7 +63,7 @@ package() { install -Dm 644 "$srcdir"/scanservjs.conf "$pkgdir"/etc/conf.d/scanservjs } sha512sums=" -f19b1bd5acb01f82fa98bc79f9d401f1b6c19aa9e4319d75efd4b82a6db44a348784953ae1542d362d3b8e328a1a469e9320fd7c937e6aa102a19a36cd8ce9e8 scanservjs-3.0.4.tar.gz +e3746cfab118b08b75fe5a862e1b06d35bce3fafe7b5cf482ddfd28aad8ac9879981eef5bdadc35a783607aac49eef95b966ff1d2ddf431eaf6e2d7e335623fb scanservjs-3.0.3.tar.gz f58dd5e1c4936d7e25065a295f5d01e64189cdefe92ba54fc875348a59a30b2055c93464d510a52820e66b42a69d0626d3513c93ab60b0768e1e8d5b3538bb13 scanservjs.initd 9d4fdab3803a598c729bf703369d8594b383163b05045f31e516f184a87d8deef8c8b40942d324e04bdf751ac9d63f7de25b13364f9f30888eba2af873369b36 scanservjs.conf " diff --git a/user/scantopl/APKBUILD b/user/scantopl/APKBUILD index a68b668..725e413 100644 --- a/user/scantopl/APKBUILD +++ b/user/scantopl/APKBUILD @@ -1,10 +1,11 @@ -# Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + pkgname=scantopl -pkgver=1.0.1 +pkgver=0.0.1 pkgrel=0 pkgdesc="Automatically send scanservjs scanned document to paperless-ng" -_gittag="v$pkgver" +_gittag="5c5d71a9e1cf8985d374453c866c1711692334e2" url="https://github.com/Celedhrim/scantopl" arch="all" license="WTFPL" @@ -15,7 +16,7 @@ source=" scantopl.initd scantopl.conf " -builddir="$srcdir/$pkgname-${_gittag/v}" +builddir="$srcdir/$pkgname-$_gittag" options="!check" # No testsuite build() { @@ -30,7 +31,7 @@ package() { install -Dm644 "$srcdir"/scantopl.conf "$pkgdir"/etc/conf.d/scantopl } sha512sums=" -e5238c4f8e727e80c5c66441e8de5eeb775fdfe05ee85509c942c2516e8996243cd1b72c7c87c8bbee2e0475cc0075244aa28164a746f6e7eded253bcb707ba7 scantopl-1.0.1.tar.gz +f47823ffdea68de71ce9f3a347f31eee3556aae2087f68d2cf4078b9694894d06fc8de94e806ad34358e0ec636ace6dc5d97273c3102192584cb540ede3bd288 scantopl-0.0.1.tar.gz 8238411fe8881be6690a583a6bfc71e52f3131320f5d92bb36f8af61802980265a8cf5250eb699d9214f7c6c168d14c39867a09587fb07841a8504a6a28db74b scantopl.initd ee2e631901b1d88c0dede6587318e44884255a7c82e090371f017dbb91563c16f0567c0d45b3183d0a8abb3ee4b71a33f3d79258ad2b2f6d8930a5bc7625070a scantopl.conf " diff --git a/unmaintained/soci/APKBUILD b/user/soci/APKBUILD similarity index 100% rename from unmaintained/soci/APKBUILD rename to user/soci/APKBUILD diff --git a/user/tandoor-recipes/APKBUILD b/user/tandoor-recipes/APKBUILD index 8a680e0..72a3d33 100644 --- a/user/tandoor-recipes/APKBUILD +++ b/user/tandoor-recipes/APKBUILD @@ -4,8 +4,7 @@ pkgname=tandoor-recipes pkgver=1.5.12 pkgrel=1 pkgdesc="Application for managing recipes, planning meals, building shopping lists, etc." -# armv7: oom -arch="noarch !armv7" +arch="noarch" url="https://github.com/TandoorRecipes/recipes" license="AGPL-3.0-only" depends=" @@ -57,7 +56,7 @@ depends=" py3-requests py3-six py3-uritemplate - py3-validators~0.20 + py3-validators~=0.20 py3-webdavclient3 py3-whitenoise py3-yaml diff --git a/user/thelounge/APKBUILD b/user/thelounge/APKBUILD new file mode 100644 index 0000000..7988787 --- /dev/null +++ b/user/thelounge/APKBUILD @@ -0,0 +1,83 @@ +# Contributor: Kay Thomas +# Maintainer: Kay Thomas +pkgname=thelounge +pkgver=4.4.1 +pkgrel=2 +pkgdesc="Modern, responsive, cross-platform, self-hosted web IRC client" +url="https://thelounge.chat" +# x86: textrels +# s390x: fails to check +# riscv64: fails to build +arch="all !x86 !s390x !riscv64" +license="MIT" +depends="nodejs" +makedepends="yarn npm python3" +subpackages="$pkgname-openrc" +pkgusers="thelounge" +pkggroups="thelounge" +install="$pkgname.pre-install $pkgname.post-install" +source="$pkgname-$pkgver.tar.gz::https://github.com/thelounge/thelounge/archive/v$pkgver.tar.gz + no-version-test.patch + thelounge.initd + allow-https-for-connect-src.patch + " +options="net" # npm + +prepare() { + default_prepare + + yarn install --frozen-lockfile +} + +build() { + NODE_ENV=production yarn run build +} + +check() { + CI=yes yarn run test:mocha +} + +package() { + yarn install --production --ignore-scripts --prefer-offline + NODE_ENV=production npm install --unsafe-perm -g --prefix "$pkgdir"/usr + + # Remove incorrect symlink, copy correct files + rm "$pkgdir"/usr/lib/node_modules/thelounge + mkdir -p "$pkgdir"/usr/lib/node_modules/thelounge + cp -a index.js client public node_modules dist package.json "$pkgdir"/usr/lib/node_modules/thelounge/ + + # cleanup unused files + find "$pkgdir" -type f -a \( \ + -name "*.ts" \ + -o -name "webpack*" \ + -o -name "tsconfig*" \ + -o -name "babel.config*" \ + -o -name "README*" \ + -o -name "CHANGELOG*" \ + -o -name "*.map" \ + -o -name "LICENSE" \ + \) \ + -delete + + # Set home location + echo /var/lib/thelounge > \ + "$pkgdir"/usr/lib/node_modules/$pkgname/.thelounge_home + + # Add default config + # this is only read from 'home' so we have to just put everything in var/lib + install -dm755 -o thelounge -g thelounge \ + "$pkgdir"/var/lib/thelounge + install -m644 -o thelounge -g thelounge \ + "$pkgdir"/usr/lib/node_modules/$pkgname/dist/defaults/config.js \ + "$pkgdir"/var/lib/thelounge/config.js + + install -Dm755 "$srcdir"/$pkgname.initd \ + "$pkgdir"/etc/init.d/$pkgname +} + +sha512sums=" +7695121a713a23688bc6f52dae2574bab1288eea930fd50d4dd85037233e9f23bd8e460980c69cdd14ea8648da4720d84e8196547b6a18e69d2f478b43d6e29a thelounge-4.4.1.tar.gz +cbf80e23b0af8f0185699d6b03816c645c51b85fff7f163d3cd3d00296ed816b6ab01529b359fbfd549a79e8adb72bbc83bc7a389cf13e0afd50636ff79a138e no-version-test.patch +f367d27ebcc412ff03c12ae98e50aeae5051fb5ffa9da6220f664c59993ed0e330b55b3b41fe941d546634901163d006e318891b4b886f6c49a93e0888fccd3e thelounge.initd +212e468d6cedaa528b7fad534b8ba0e7a3d69137940cdabd22dbe34375491900d5b7d577550aa3b245ad7775488a90e308019db55ff15e8ede105c4b9c15b015 allow-https-for-connect-src.patch +" diff --git a/user/thelounge/allow-https-for-connect-src.patch b/user/thelounge/allow-https-for-connect-src.patch new file mode 100644 index 0000000..a147a91 --- /dev/null +++ b/user/thelounge/allow-https-for-connect-src.patch @@ -0,0 +1,13 @@ +diff --git a/server/server.ts b/server/server.ts.orig +index 7a1514e..5ecdea9 100644 +--- a/server/server.ts ++++ b/server/server.ts.orig +@@ -377,7 +377,7 @@ function addSecurityHeaders(req: Request, res: Response, next: NextFunction) { + "default-src 'none'", // default to nothing + "base-uri 'none'", // disallow , has no fallback to default-src + "form-action 'self'", // 'self' to fix saving passwords in Firefox, even though login is handled in javascript +- "connect-src 'self' ws: wss:", // allow self for polling; websockets ++ "connect-src 'self' ws: wss: https:", // allow self for polling; websockets + "style-src 'self' https: 'unsafe-inline'", // allow inline due to use in irc hex colors + "script-src 'self'", // javascript + "worker-src 'self'", // service worker diff --git a/user/thelounge/no-version-test.patch b/user/thelounge/no-version-test.patch new file mode 100644 index 0000000..dfae092 --- /dev/null +++ b/user/thelounge/no-version-test.patch @@ -0,0 +1,19 @@ +diff --git a/test/src/helperTest.ts b/test/src/helperTest.ts +index 2a8ddc8..22f0532 100644 +--- a/test/src/helperTest.ts ++++ b/test/src/helperTest.ts +@@ -40,14 +40,6 @@ describe("Helper", function () { + describe("#getVersion()", function () { + const version = Helper.getVersion(); + +- it("should mention it is served from source code", function () { +- expect(version).to.include("source"); +- }); +- +- it("should include a short Git SHA", function () { +- expect(version).to.match(/\([0-9a-f]{7,11} /); +- }); +- + it("should include a valid semver version", function () { + expect(version).to.match(/v[0-9]+\.[0-9]+\.[0-9]+/); + }); diff --git a/user/thelounge/thelounge.initd b/user/thelounge/thelounge.initd new file mode 100644 index 0000000..b10d1c5 --- /dev/null +++ b/user/thelounge/thelounge.initd @@ -0,0 +1,14 @@ +#!/sbin/openrc-run + +supervisor=supervise-daemon +name="thelounge" +command="/usr/bin/thelounge" +command_args="start" +command_user="thelounge:thelounge" +command_background=true +pidfile="/run/thelounge.pid" + +depend() { + need net localmount + after firewall +} diff --git a/user/thelounge/thelounge.post-install b/user/thelounge/thelounge.post-install new file mode 100644 index 0000000..1651780 --- /dev/null +++ b/user/thelounge/thelounge.post-install @@ -0,0 +1,13 @@ +#!/bin/sh + +cat >&2 <<-EOF +* +* The configuration is in /var/lib/thelounge/config.js. +* To add users, use the cli: +* doas -u thelounge thelounge .. +* e.g. +* doas -u thelounge thelounge add myuser +* +EOF + +exit 0 diff --git a/user/thelounge/thelounge.pre-install b/user/thelounge/thelounge.pre-install new file mode 100644 index 0000000..b91b1ef --- /dev/null +++ b/user/thelounge/thelounge.pre-install @@ -0,0 +1,6 @@ +#!/bin/sh + +addgroup -S thelounge 2>/dev/null +adduser -S -D -H -s /sbin/nologin -G thelounge -g thelounge thelounge 2>/dev/null + +exit 0 diff --git a/user/u-boot-rm/APKBUILD b/user/u-boot-rm/APKBUILD new file mode 100644 index 0000000..da2e135 --- /dev/null +++ b/user/u-boot-rm/APKBUILD @@ -0,0 +1,125 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=u-boot-rm +pkgver=2020.09 +_rm1tag=97b35fdddf0077abd2e0f0409b94ef20adbe8565 +_rm2tag=47c91918aa7724c16b6eaf87cf5dfbf4548eafc1 +pkgrel=9 +pkgdesc="u-boot bootloader common files" +url="https://www.denx.de/wiki/U-Boot/" +arch="armv7" +license="GPL-2.0-or-later OFL-1.1 BSD-2-Clause BSD-3-Clause eCos-2.0 IBM-pibs + ISC LGPL-2.0-only LGPL-2.1-only X11" +options="!check" # no tests +makedepends=" + bc + bison + dtc + flex + gnutls-dev + linux-headers + openssl-dev>3 + py3-elftools + py3-setuptools + python3-dev + swig + util-linux-dev + " +source=" + u-boot-rm1-$_rm1tag.tar.gz::https://github.com/reMarkable/uboot/archive/$_rm1tag.tar.gz + u-boot-rm2-$_rm2tag.tar.gz::https://github.com/reMarkable/uboot/archive/$_rm2tag.tar.gz + update-u-boot + README.txt + rm1-uboot-config-patch.diff + rm2-uboot-config-patch.diff + " +builddir="$srcdir" + +#rm2:zero-sugar broken +case "$CARCH" in +arm*) board_configs=" + zerogravitas:zero-gravitas + ";; +esac + +for board_config in $board_configs; do + _allboards="$_allboards $pkgname-${board_config%%:*}" +done + +subpackages="$pkgname-all:_all $_allboards" +prepare() { + default_prepare + + cd "$builddir"/uboot-$_rm1tag + patch -p1 -i "$srcdir"/rm1-uboot-config-patch.diff + # patch -p1 -i "$srcdir"/rm1-ttygs0-serial.diff + cd "$builddir"/uboot-$_rm2tag + patch -p1 -i "$srcdir"/rm2-uboot-config-patch.diff +} + +build() { + local board_config board + for board_config in $board_configs; do + local configs="${board_config#*:}" + for board in ${configs//,/ }; do + msg "Building u-boot for $board" + case $board in + zero-gravitas) cd "$builddir"/uboot-$_rm1tag;; + zero-sugar) cd "$builddir"/uboot-$_rm2tag;; + esac + + touch include/config.h + LC_ALL=C date +'#define U_BOOT_DATE "%b %d %C%y"' > include/timestamp_autogenerated.h + LC_ALL=C date +'#define U_BOOT_TIME "%T"' >> include/timestamp_autogenerated.h + + export BUILD_DIR="$builddir"/build/$board + mkdir -p "$BUILD_DIR" + make O="$BUILD_DIR" ${board}_config + make O="$BUILD_DIR" all + done + done +} + +package() { + mkdir -p "$pkgdir"/usr/share/$pkgname "$pkgdir"/usr/sbin + install "$srcdir"/README.txt "$pkgdir"/usr/share/$pkgname/README.txt + install "$srcdir"/update-u-boot "$pkgdir"/usr/sbin +} + +_all() { + pkgdesc="u-boot for all boards (meta package)" + depends="$_allboards" + + mkdir -p "$subpkgdir"/ +} + +_split_boards() { + cd "$builddir"/build + pkgdesc="u-boot for $1" + depends="u-boot-rm" + shift + local board + for board; do + msg "Including board $board" + mkdir -p "$subpkgdir"/usr/share/$pkgname/$board + export BUILD_DIR="$builddir"/build/$board + + cp "$BUILD_DIR"/u-boot.imx "$subpkgdir"/usr/share/$pkgname/$board/u-boot.bin + done +} + +for board_config in $board_configs; do + _board="${board_config%%:*}" + _configs="${board_config#*:}" + eval "$_board() { _split_boards $_board ${_configs//,/ }; }" +done + +sha512sums=" +7cc8d513cac1d63ee5119529caa056164ee3bc3633da5d880fbfb344b770c7c53c41475d42dd129b505390dcd5449e14524afc06f7cdba9354af7e70a7035ef9 u-boot-rm1-97b35fdddf0077abd2e0f0409b94ef20adbe8565.tar.gz +d0d18b123c4281285a8b3c1afd9ef623b48a33506399c8e0dbc393f22d967ee3e5df7030aab26c4fe8cad614f3f22f1ea5d6b5bb4ef5cc46fffe56b7ac7c3c28 u-boot-rm2-47c91918aa7724c16b6eaf87cf5dfbf4548eafc1.tar.gz +a905e4dcdb2704e0b1d4f0ab4a6333d3f1ffcec5c3a8359f5789800eb2114dad673cf0b5f24cae3a590f27333dff2e96b6f1efae5a466f9281a3d65efe403a1e update-u-boot +f8c9bb6e84d6f0620c976ac7ad5dd7ec7ff9dfdd4b1d03d2bf6653e7beccf80bdf2debfc92fb1f696dba92fb40287d3c45897e0078951451d0835cb61a5f16d1 README.txt +673cb917cc565ae245d4a7d659227bc240473112bc9c73ae184a64ce74be7994273d6dc4db17194d348941f83a42b3b67d3140f6f23c37c13d6dc93f7d76cc39 rm1-uboot-config-patch.diff +0e98404ca6d20eb01bd9c129b05e2eb10c60a692a56adc221ea283b4bfe7b0bcc2851121d4c3fe51e07a9784c339f7ccb221e0cc3f3603144fec46be66d0cbcc rm2-uboot-config-patch.diff +" diff --git a/user/u-boot-rm/README.txt b/user/u-boot-rm/README.txt new file mode 100644 index 0000000..c342913 --- /dev/null +++ b/user/u-boot-rm/README.txt @@ -0,0 +1,32 @@ +WandBoard +--------- + +- ROM loads boot loader from raw MMC sectors at fixed address +- NOTE: 1st partition needs to start after boot loader + +- Install u-boot with: + dd if=wandboard/SPL of=/dev/mmcblk0 bs=1k seek=1 + dd if=wandboard/u-boot.img of=/dev/mmcblk0 bs=1k seek=69 + sync + + (Note - the SD card node may vary, so adjust this as needed). + +- Insert the SD card into the slot located in the bottom of the board + (same side as the mx6 processor) + +BeagleBoard +----------- + +- ROM looks for 1st partition with FAT, and loads MLO from it +- NOTE: MLO needs to be the first file created on this partition + +- Install u-boot with: + cp am335x_boneblack/{MLO,u-boot.img} /media/mmcblk0p1/ + +Sunxi (Cubie* etc) +------------------ + +- ROM loads boot loader from SD-CARD sectors at fixed address +- Install u-boot with: + sudo dd if=/u-boot-sunxi-with-spl.bin of=/dev/sda bs=1024 seek=8 + diff --git a/user/u-boot-rm/fix-linking-with-ld.patch b/user/u-boot-rm/fix-linking-with-ld.patch new file mode 100644 index 0000000..827c566 --- /dev/null +++ b/user/u-boot-rm/fix-linking-with-ld.patch @@ -0,0 +1,52 @@ +From 58772283210e15f8d803db4aa67c877d668db867 Mon Sep 17 00:00:00 2001 +Patch-Source: https://github.com/u-boot/u-boot/commit/58772283210e15f8d803db4aa67c877d668db867 +From: Alistair Delva +Date: Wed, 20 Oct 2021 21:31:33 +0000 +Subject: [PATCH] x86: Fix linking u-boot with ld.lld + +When linking the final u-boot binary with LLD, the following link errors +are seen: + +ld.lld: error: can't create dynamic relocation R_386_32 against local + symbol in readonly segment; recompile object files with + -fPIC or pass '-Wl,-z,notext' to allow text relocations + in the output +>>> defined in arch/x86/cpu/start.o +>>> referenced by arch/x86/cpu/start.o:(.text.start+0x32) +[...] +>>> defined in arch/x86/cpu/start16.o +>>> referenced by arch/x86/cpu/start16.o:(.start16+0x1C) + +According to Nick Desaulniers: + +"This is a known difference between GNU and LLVM linkers; the GNU + linkers permit relocations in readonly segments (making them not read + only), LLVM does not (by default)." + +Since U-Boot apparently seems to use relocations in readonly segments, +change the global linker flags to permit them when linking with LLD by +specifying '-z notext'. + +Signed-off-by: Alistair Delva +Cc: Nick Desaulniers +Cc: Simon Glass +Cc: Bin Meng +Reviewed-by: Simon Glass +--- + Makefile | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/Makefile b/Makefile +index c0ea933cb636..286757986c02 100644 +--- a/Makefile ++++ b/Makefile +@@ -776,6 +776,9 @@ ifneq ($(CONFIG_SYS_TEXT_BASE),) + LDFLAGS_u-boot += -Ttext $(CONFIG_SYS_TEXT_BASE) + endif + ++# ld.lld support ++LDFLAGS_u-boot += -z notext ++ + # Normally we fill empty space with 0xff + quiet_cmd_objcopy = OBJCOPY $@ + cmd_objcopy = $(OBJCOPY) --gap-fill=0xff $(OBJCOPYFLAGS) \ diff --git a/user/u-boot-rm/rm1-ttygs0-serial.diff b/user/u-boot-rm/rm1-ttygs0-serial.diff new file mode 100644 index 0000000..9596fc4 --- /dev/null +++ b/user/u-boot-rm/rm1-ttygs0-serial.diff @@ -0,0 +1,13 @@ +diff --git a/include/configs/zero-gravitas.h.orig b/include/configs/zero-gravitas.h +index 818ed56..6eb7447 100644 +--- a/include/configs/zero-gravitas.h.orig ++++ b/include/configs/zero-gravitas.h +@@ -73,7 +73,7 @@ + "active_partition=2\0" \ + "bootlimit=1\0" \ + "por=undefined\0" \ +- "mmcargs=setenv bootargs console=${console},${baudrate} " \ ++ "mmcargs=setenv bootargs console=${console},${baudrate} console=ttyGS0,115200 " \ + "root=/dev/mmcblk1p2 rootwait rootfstype=ext4 rw por=${por};\0" \ + "loadimage=ext4load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \ + "loadfdt=ext4load mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \ diff --git a/user/u-boot-rm/rm1-uboot-config-patch.diff b/user/u-boot-rm/rm1-uboot-config-patch.diff new file mode 100644 index 0000000..55d6ce1 --- /dev/null +++ b/user/u-boot-rm/rm1-uboot-config-patch.diff @@ -0,0 +1,83 @@ +diff --git a/include/configs/zero-gravitas.h b/include/configs/zero-gravitas.h +index 074f171422..818ed56892 100644 +--- a/include/configs/zero-gravitas.h ++++ b/include/configs/zero-gravitas.h +@@ -71,12 +71,10 @@ + "splashimage=0x80000000\0" \ + "splashpos=m,m\0" \ + "active_partition=2\0" \ +- "fallback_partition=3\0" \ + "bootlimit=1\0" \ + "por=undefined\0" \ + "mmcargs=setenv bootargs console=${console},${baudrate} " \ +- "systemd.crash_reboot=true memtest " \ +- "root=/dev/mmcblk1p${active_partition} rootwait rootfstype=ext4 quiet rw por=${por};\0" \ ++ "root=/dev/mmcblk1p2 rootwait rootfstype=ext4 rw por=${por};\0" \ + "loadimage=ext4load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \ + "loadfdt=ext4load mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \ + "mmcboot=echo Booting from mmc ...; " \ +@@ -89,41 +87,13 @@ + "echo WARN: Cannot load the DT; " \ + "fi; " \ + "fi; " \ +- "fi;\0" \ +- "memboot=echo Booting from memory...; " \ +- "setenv bootargs console=${console},${baudrate} " \ +- "g_mass_storage.stall=0 g_mass_storage.removable=1 " \ +- "g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF "\ +- "g_mass_storage.iSerialNumber=\"\" rdinit=/linuxrc; "\ +- "bootz ${loadaddr} ${initrd} ${fdt_addr};\0" \ +- "altbootcmd=echo Running from fallback root...; " \ +- "run memboot; " \ +- "if test ${bootcount} -gt 10; then " \ +- "echo WARN: Failed too much, resetting bootcount and turning off; " \ +- "setenv bootcount 0; " \ +- "saveenv; " \ +- "poweroff; " \ +- "fi; " \ +- "setenv mmcpart ${fallback_partition}; " \ +- "setenv bootargs console=${console},${baudrate} " \ +- "root=/dev/mmcblk1p${fallback_partition} rootwait rootfstype=ext4 quiet rw " \ +- "systemd.log_level=debug systemd.log_target=kmsg memtest " \ +- "log_buf_len=1M printk.devkmsg systemd.journald.forward_to_console=1; " \ +- "run mmcboot;\0" \ ++ "fi;\0" + + /* Always try to boot from memory first, in case of USB download mode */ + #define CONFIG_BOOTCOMMAND \ +- "if test ! -e mmc 1:1 uboot.env; then " \ +- "saveenv; " \ +- "fi; " \ +- "run memboot; " \ + "run mmcargs; " \ + "setenv mmcpart ${active_partition}; " \ +- "run mmcboot; " \ +- "echo WARN: unable to boot from either RAM or eMMC; " \ +- "setenv upgrade_available 1; " \ +- "saveenv; " \ +- "reset; " ++ "run mmcboot; " + + #ifdef CONFIG_BOOTDELAY + #undef CONFIG_BOOTDELAY +@@ -157,18 +127,8 @@ + /* Environment organization */ + #define CONFIG_ENV_SIZE SZ_8K + +-#define CONFIG_ENV_IS_IN_FAT +-/*#define CONFIG_ENV_IS_NOWHERE*/ +- +-#ifdef CONFIG_ENV_IS_IN_FAT +-#define CONFIG_BOOTCOUNT_LIMIT +-#define CONFIG_BOOTCOUNT_ENV +- +-#define FAT_ENV_INTERFACE "mmc" +-#define FAT_ENV_DEVICE_AND_PART "1:1" +-#define CONFIG_FAT_WRITE +-#define FAT_ENV_FILE "uboot.env" +-#endif ++/*#define CONFIG_ENV_IS_IN_FAT*/ ++#define CONFIG_ENV_IS_NOWHERE + + #ifdef CONFIG_CMD_SF + #define CONFIG_MXC_SPI diff --git a/user/u-boot-rm/rm2-uboot-config-patch.diff b/user/u-boot-rm/rm2-uboot-config-patch.diff new file mode 100644 index 0000000..4aa04bc --- /dev/null +++ b/user/u-boot-rm/rm2-uboot-config-patch.diff @@ -0,0 +1,75 @@ +diff --git a/include/configs/zero-sugar.h.orig b/include/configs/zero-sugar.h +index 6b5450a..dd6da5c 100644 +--- a/include/configs/zero-sugar.h.orig ++++ b/include/configs/zero-sugar.h +@@ -122,12 +122,10 @@ + "panel=EPD\0" \ + "mmcdev=0\0" \ + "active_partition=2\0" \ +- "fallback_partition=3\0 " \ + "bootlimit=1\0 " \ + "mmcautodetect=yes\0" \ + "mmcargs=setenv bootargs console=${console},${baudrate} " \ +- "root=/dev/mmcblk2p${active_partition} rootwait rootfstype=ext4 rw " \ +- "quiet panic=20 systemd.crash_reboot\0" \ ++ "root=/dev/mmcblk2p2 rootwait rootfstype=ext4 rw " \ + "loadimage=ext4load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \ + "loadfdt=ext4load mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \ + "mmcboot=echo Booting from mmc ...; " \ +@@ -140,41 +138,13 @@ + "echo WARN: Cannot load the DT; " \ + "fi; " \ + "fi; " \ +- "fi;\0" \ +- "memboot=echo Booting from memory...; " \ +- "setenv bootargs console=${console},${baudrate} " \ +- "g_mass_storage.stall=0 g_mass_storage.removable=1 " \ +- "g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF "\ +- "g_mass_storage.iSerialNumber=\"\" rdinit=/linuxrc; "\ +- "bootz ${loadaddr} ${initrd} ${fdt_addr};\0" \ +- "altbootcmd=echo Running from fallback root...; " \ +- "run memboot; " \ +- "if test ${bootcount} -gt 10; then " \ +- "echo WARN: Failed too much, resetting bootcount and turning off; " \ +- "setenv bootcount 0; " \ +- "saveenv; " \ +- "poweroff; " \ +- "fi; " \ +- "setenv mmcpart ${fallback_partition}; " \ +- "setenv bootargs console=${console},${baudrate} " \ +- "root=/dev/mmcblk2p${fallback_partition} rootwait rootfstype=ext4 quiet rw " \ +- "systemd.log_level=debug systemd.log_target=kmsg memtest " \ +- "log_buf_len=1M printk.devkmsg systemd.journald.forward_to_console=1; " \ +- "run mmcboot;\0" \ ++ "fi;\0" + + /* Always try to boot from memory first, in case of USB download mode */ + #define CONFIG_BOOTCOMMAND \ +- "if test ! -e mmc 0:1 uboot.env; then " \ +- "saveenv; " \ +- "fi; " \ +- "run memboot; " \ + "run mmcargs; " \ + "setenv mmcpart ${active_partition}; " \ +- "run mmcboot; " \ +- "echo WARN: unable to boot from either RAM or eMMC; " \ +- "setenv upgrade_available 1; " \ +- "saveenv; " \ +- "reset; " ++ "run mmcboot; " + + #define CONFIG_SYS_MEMTEST_START 0x80000000 + #define CONFIG_SYS_MEMTEST_END (CONFIG_SYS_MEMTEST_START + 0x20000000) +@@ -198,10 +168,8 @@ + /* Environment organization */ + #define CONFIG_ENV_SIZE SZ_8K + +-#ifdef CONFIG_ENV_IS_IN_FAT +-#define CONFIG_BOOTCOUNT_LIMIT +-#define CONFIG_BOOTCOUNT_ENV +-#endif ++/*#define CONFIG_ENV_IS_IN_FAT*/ ++#define CONFIG_ENV_IS_NOWHERE + + #define CONFIG_SYS_FSL_USDHC_NUM 2 + diff --git a/user/u-boot-rm/update-u-boot b/user/u-boot-rm/update-u-boot new file mode 100755 index 0000000..e90bcbd --- /dev/null +++ b/user/u-boot-rm/update-u-boot @@ -0,0 +1,129 @@ +#!/bin/sh + +verbose= +board= +device= +dryrun= +imagedir= + +get_defaults() { + if [ -z "$board" -a -e /sys/firmware/devicetree/base/compatible ]; then + case "$(cat /sys/firmware/devicetree/base/compatible 2>/dev/null)" in + wand,*) board=wand ;; + esac + fi + + if [ -z "$device" ]; then + case "$board" in + wand|cubie|cubie2) device=/dev/mmcblk0p0 ;; + zero-gravitas) device=/dev/mmcblk1 ;; + esac + fi + + if [ -z "$imagedir" ]; then + imagedir="$(realpath $(dirname $0))" + [ -f "$imagedir/README.txt" ] || imagedir="/usr/share/u-boot-rm" + fi +} + +die() { + echo "ERROR: $@" + exit 1 +} + +usage() { + get_defaults + + cat <] [-d|--device ] + +options: + + -b,--board Specify the board type: wand, cubie, cubie2 + (current default: ${board:-none}) + + -d,--device Specify the device where to install u-boot + (current default: ${device:-none}) + + -i,--imagedir Specify u-boot image directory + (current default: ${imagedir:-none}) + + -n,--dry-run Print commands but don't execute them + +EOF +} + +while [ $# -gt 0 ]; do + opt="$1" + shift + case "$opt" in + -b|--board) + case "$1" in + wand|wandboard) board="wand" ;; + cubie|cubieboard) board="cubie" ;; + zerogravitas) board="zero-gravitas" ;; + zerosugar) board="zero-sugar" ;; + *) usage; exit 1;; + esac + shift + ;; + -d|--device) + device="$1" + shift + ;; + -i|--imagedir) + imagedir="$1" + shift + ;; + -n|--dry-run) + dryrun="echo" + ;; + --) + break + ;; + -*) + usage + exit 1 + ;; + esac +done + +get_defaults +if [ -z "$board" -o -z "$device" -o -z "$imagedir" -o ! -e "$imagedir" ]; then + usage + exit 1 +fi + +if [ -z "$dryrun" ]; then + echo "Updating $board u-boot in $device in 3 seconds..." + sleep 3 +fi + +( +set -e +case "$board" in +wand) + [ -e "$imagedir/wandboard" ] || die "wandboard images not installed, apk add u-boot-wandboard" + $dryrun dd if=$imagedir/wandboard/SPL of=$device bs=1k seek=1 status=none + $dryrun dd if=$imagedir/wandboard/u-boot.img of=$device bs=1k seek=69 status=none + ;; +cubie|cubie2) + [ -e "$imagedir/Cubieboard${board#cubie}" ] || die "Cubieboard images not installed, apk add u-boot-cubieboard" + $dryrun dd if=$imagedir/Cubieboard${board#cubie}/u-boot-sunxi-with-spl.bin of=/dev/sda bs=1024 seek=8 status=none + ;; +zero-gravitas) + [ -e "$imagedir/zero-gravitas" ] || die "rM1 images not installed, apk add u-boot-rm1" + $dryrun dd if=/dev/zero of=$device bs=512 seek=1536 count=16 + [ -z "$dryrun" ] && echo 0 > /sys/block/${device/\/dev\/}boot0/force_ro + $dryrun dd if=/dev/zero of=${device}boot0 bs=512 count=2 + $dryrun dd if=$imagedir/zero-gravitas/u-boot.bin of=${device}boot0 bs=512 seek=2 + [ -z "$dryrun" ] && echo 1 > /sys/block/${device/\/dev\/}boot0/force_ro + ;; +zero-sugar) + die "rM2 not yet tested" + ;; +esac +$dryrun sync +) || die "U-Boot installation in $device failed" + +[ -z "$dryrun" ] && echo "Completed successfully." diff --git a/user/xf86-video-fbdev-rm/APKBUILD b/user/xf86-video-fbdev-rm/APKBUILD new file mode 100644 index 0000000..edfe76b --- /dev/null +++ b/user/xf86-video-fbdev-rm/APKBUILD @@ -0,0 +1,40 @@ +# Maintainer: Natanael Copa +pkgname=xf86-video-fbdev-rm +pkgver=0.5.0 +pkgrel=3 +pkgdesc="Video driver for framebuffer device with rM patches" +url="https://www.x.org" +arch="all" +license="MIT" +subpackages="$pkgname-doc" +provides="xf86-video-fbdev=$pkgver-r$pkgrel" +makedepends="xorg-server-dev libxi-dev util-macros xorgproto linux-rm-headers" +builddir="$srcdir"/xf86-video-fbdev-$pkgver +source=" + https://www.x.org/releases/individual/driver/xf86-video-fbdev-$pkgver.tar.bz2 + epdc_auto-update-patch.patch + fix-build.patch + " + +build() { + export LDFLAGS="$LDFLAGS -Wl,-z,lazy" + ./configure \ + --build=$CBUILD \ + --host=$CHOST \ + --prefix=/usr + make +} + +check() { + make check +} + +package() { + make DESTDIR="$pkgdir" install +} + +sha512sums=" +c1217b943bbe3301b3c2a8649ed1004c3c67b02607bd56bbc14f6dfa05e7f0184332c81a6a19595514745501ed88526aee932e555779b7c3a8233646b0979448 xf86-video-fbdev-0.5.0.tar.bz2 +c211a2edf90b622d522a0513358431afa33c7b3b958b054221ff3a6e8ff72d1012b0141b073ea070f4bb2d2f9042d8e092434f14a91bea3bf8bf188c78c0bcb7 epdc_auto-update-patch.patch +19c6680d8e8b0ba3903fb76438b54f294a1715b93d50e1cb2ef95bb04770add5fdad1df4260ab7eb00bb26578baa79b7cfed3f7fa6cba70348611cc3797af3ee fix-build.patch +" diff --git a/user/xf86-video-fbdev-rm/epdc_auto-update-patch.patch b/user/xf86-video-fbdev-rm/epdc_auto-update-patch.patch new file mode 100644 index 0000000..f54f524 --- /dev/null +++ b/user/xf86-video-fbdev-rm/epdc_auto-update-patch.patch @@ -0,0 +1,128 @@ +diff --git a/src/fbdev.c.orig b/src/fbdev.c +index f25ef72..46b3c8c 100644 +--- a/src/fbdev.c.orig ++++ b/src/fbdev.c +@@ -8,6 +8,8 @@ + #endif + + #include ++#include ++#include + + /* all driver need this */ + #include "xf86.h" +@@ -18,6 +20,7 @@ + #include "colormapst.h" + #include "xf86cmap.h" + #include "shadow.h" ++#include "os.h" + #include "dgaproc.h" + + /* for visuals */ +@@ -186,6 +189,9 @@ typedef struct { + int rotate; + Bool shadowFB; + Bool shadow24; ++ Bool timerActive; ++ OsTimerPtr timer; ++ RegionPtr region_queue; + void *shadow; + CloseScreenProcPtr CloseScreen; + CreateScreenResourcesProcPtr CreateScreenResources; +@@ -697,6 +703,87 @@ fbdevUpdatePacked(ScreenPtr pScreen, shadowBufPtr pBuf) + shadowUpdatePacked(pScreen, pBuf); + } + ++static CARD32 FBDevEPDUpdateWork(OsTimerPtr timer, ++ CARD32 time, ++ void *arg); ++ ++static void FBDevEPDUpdate(ScreenPtr pScreen, shadowBufPtr pBuf) ++{ ++ RegionPtr damage = DamageRegion(pBuf->pDamage); ++ ++ ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); ++ FBDevPtr fPtr = FBDEVPTR(pScrn); ++ shadowUpdateProc update; ++ if (fPtr->shadow24) ++ update = fbdevUpdate32to24; ++ else if (fPtr->rotate) ++ update = fbdevUpdateRotatePacked; ++ else ++ update = fbdevUpdatePacked; ++ ++ update(pScreen, pBuf); ++ ++ if (fPtr->region_queue) { ++ RegionAppend(fPtr->region_queue, damage); ++ } else { ++ fPtr->region_queue = RegionDuplicate(damage); ++ } ++ ++ if (!fPtr->timerActive) { ++ FBDevEPDUpdateWork(fPtr->timer, GetTimeInMillis(), ++ pScreen); ++ } ++} ++ ++static CARD32 FBDevEPDUpdateWork(OsTimerPtr timer, ++ CARD32 time, ++ void *arg) ++{ ++ ScreenPtr pScreen = (void *)arg; ++ ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); ++ FBDevPtr fPtr = FBDEVPTR(pScrn); ++ BoxPtr pbox; ++ Bool overlap; ++ int nbox; ++ int fd = fbdevHWGetFD(pScrn); ++ if (fPtr->region_queue == NULL) { ++ fPtr->timerActive = FALSE; ++ return 0; ++ } ++ ++ struct mxcfb_update_data upd_region; ++ RegionValidate(fPtr->region_queue, &overlap); ++ pbox = RegionRects(fPtr->region_queue); ++ nbox = RegionNumRects(fPtr->region_queue); ++ ++ while(nbox--) { ++ int x, y, w, h; ++ int ret; ++ x = pbox->x1; ++ y = pbox->y1; ++ w = (pbox->x2 - pbox->x1); ++ h = pbox->y2 - pbox->y1; ++ memset(&upd_region, 0, sizeof(upd_region)); ++ upd_region.update_region.left = x; ++ upd_region.update_region.top = y; ++ upd_region.update_region.width = w; ++ upd_region.update_region.height = h; ++ upd_region.waveform_mode = WAVEFORM_MODE_AUTO; ++ upd_region.temp = TEMP_USE_AMBIENT; ++ upd_region.update_mode = UPDATE_MODE_PARTIAL; ++ upd_region.flags = 0; ++ ret = ioctl(fd, MXCFB_SEND_UPDATE, &upd_region); ++ if (ret < 0) ++ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,"update ioctl failed: %d\n", ret); ++ pbox++; ++ } ++ fPtr->timer = TimerSet(timer, 0, 50, FBDevEPDUpdateWork, pScreen); ++ fPtr->timerActive = TRUE; ++ RegionDestroy(fPtr->region_queue); ++ fPtr->region_queue = NULL; ++ return 0; ++} ++ + static Bool + FBDevCreateScreenResources(ScreenPtr pScreen) + { +@@ -722,7 +809,7 @@ FBDevCreateScreenResources(ScreenPtr pScreen) + else + update = fbdevUpdatePacked; + +- if (!shadowAdd(pScreen, pPixmap, update, FBDevWindowLinear, fPtr->rotate, ++ if (!shadowAdd(pScreen, pPixmap, FBDevEPDUpdate, FBDevWindowLinear, fPtr->rotate, + NULL)) { + return FALSE; + } diff --git a/user/xf86-video-fbdev-rm/fix-build.patch b/user/xf86-video-fbdev-rm/fix-build.patch new file mode 100644 index 0000000..f1ca165 --- /dev/null +++ b/user/xf86-video-fbdev-rm/fix-build.patch @@ -0,0 +1,17 @@ +Upstream: no (too lazy) +Reason: fixes build by getting rid of old cpp macro + +diff --git a/src/fbdev.c b/src/fbdev.c +index f25ef72..02a2b7a 100644 +--- a/src/fbdev.c ++++ b/src/fbdev.c +@@ -1010,7 +1010,7 @@ FBDevScreenInit(SCREEN_INIT_ARGS_DECL) + fPtr->CloseScreen = pScreen->CloseScreen; + pScreen->CloseScreen = FBDevCloseScreen; + +-#if XV ++#if defined(XV) + { + XF86VideoAdaptorPtr *ptr; + + diff --git a/user/xochitl-bin/APKBUILD b/user/xochitl-bin/APKBUILD new file mode 100644 index 0000000..4ea4dfa --- /dev/null +++ b/user/xochitl-bin/APKBUILD @@ -0,0 +1,50 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=xochitl-bin +pkgver=2.15.1.1189 +_pkgprefix=Xdvv3lBmE4 +pkgrel=1 +pkgdesc="Image extractor for reMarkable firmware files" +arch="armv7" +url="https://archive.org/download/rm110/RM110/" +license="MIT" +makedepends="rm-extractor p7zip" +options="!check !strip !tracedeps" # No testsuite +subpackages="$pkgname-rm1 $pkgname-rm2" +builddir="$srcdir" +source=" + $pkgname-rm1-$pkgver.signed::https://archive.org/download/rm110/RM110/2.15.1.1189_reMarkable-Xdvv3lBmE4-.signed + $pkgname-rm2-$pkgver.signed::https://archive.org/download/rm110/RM110/2.15.1.1189_reMarkable2-wVbHkgKisg-.signed + xochitl.sh +" +package() { + install -vdm755 "$pkgdir"/var/lib/$pkgname + install -vDm755 "$srcdir"/xochitl.sh "$pkgdir"/usr/bin/xochitl +} + +rm1() { + depends="$pkgname" + + mkdir -p "$subpkgdir"/usr/lib/$pkgname + cd "$subpkgdir"/usr/lib/$pkgname + rm-extractor "$builddir"/$pkgname-rm1-$pkgver.signed + 7z x out || true + rm out +} + +rm2() { + depends="$pkgname" + + mkdir -p "$subpkgdir"/usr/lib/$pkgname + cd "$subpkgdir"/usr/lib/$pkgname + rm-extractor "$builddir"/$pkgname-rm1-$pkgver.signed + 7z x out || true + rm out +} + +sha512sums=" +294a5dccebb11366ad4e9a39d15829f310f575044f6e4db2747364ae61ef984cf3e0a8f09f3a33f157365b637d0217f34a01000eff3f92dd177afd011c7b2c9f xochitl-bin-rm1-2.15.1.1189.signed +6b2baac5c970ddfbf84f376fbfd22dab0a72979160b6889352bb2464f46f9d85d0fdc9f5754dbcb431b3629df833e64913c81aa7838f636cce11b00413d8506e xochitl-bin-rm2-2.15.1.1189.signed +e0f7ce6a5a29f98929339f55a2073b251ce76802c244473677be35eeef82e0e840edddfdfe56f8dc16fe80865d22e8dd35f3815f716903966768c3d9300831f2 xochitl.sh +" diff --git a/user/xochitl-bin/xochitl.sh b/user/xochitl-bin/xochitl.sh new file mode 100755 index 0000000..1e02b34 --- /dev/null +++ b/user/xochitl-bin/xochitl.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +# we chroot into codex root, thus need to bind mount +mount -o bind /dev /usr/lib/xochitl-bin/dev +mount -o bind /proc /usr/lib/xochitl-bin/proc +mount -o bind /sys /usr/lib/xochitl-bin/sys + +# xochitl expects home to be mounted +mount -o bind /var/lib/xochitl-bin /usr/lib/xochitl-bin/home/root + +# start xochitl +chroot /usr/lib/xochitl-bin /usr/bin/xochitl diff --git a/unmaintained/znapzend/APKBUILD b/user/znapzend/APKBUILD similarity index 100% rename from unmaintained/znapzend/APKBUILD rename to user/znapzend/APKBUILD diff --git a/user/zotero/APKBUILD b/user/zotero/APKBUILD new file mode 100644 index 0000000..09790c7 --- /dev/null +++ b/user/zotero/APKBUILD @@ -0,0 +1,400 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=zotero +pkgver=7.0.0 +pkgrel=0 +_fxver=115.9.1 +_gittag=$pkgver +# Date of release, YY-MM-DD for metainfo file (see package()) +# https://www.mozilla.org/firefox/organizations/notes/ +_releasedate=2024-08-09 +pkgdesc="A free, easy-to-use tool to help you collect, organize, cite, and share your research sources." +url="https://www.mozilla.org/en-US/firefox/organizations/" +# s390x and riscv64: blocked by rust and cargo +# armhf: build failure on armhf due to wasm +# ppc64le: test suite stalls +arch="x86_64 armv7 aarch64 x86" +license="GPL-3.0-only AND LGPL-2.1-only AND LGPL-3.0-only AND MPL-2.0" +depends=" + ffmpeg-libavcodec + " +makedepends=" + alsa-lib-dev + automake + bash + bsd-compat-headers + cargo + cbindgen + clang + clang-libclang + curl + dbus-glib-dev + gettext + grep + gtk+3.0-dev + hunspell-dev + icu-dev>=69.1 + libevent-dev + libffi-dev + libjpeg-turbo-dev + libnotify-dev + libogg-dev + libtheora-dev + libtool + libvorbis-dev + libvpx-dev + libwebp-dev + libxcomposite-dev + libxt-dev + lld + llvm-dev + m4 + mesa-dev + nasm + nodejs + npm + nspr-dev + nss-dev + perl + pipewire-dev + pulseaudio-dev + python3 + rsync + sed + unzip + wasi-sdk + wireless-tools-dev + xvfb-run + zip + " +source="https://ftp.mozilla.org/pub/firefox/releases/${_fxver}esr/source/firefox-${_fxver}esr.source.tar.xz + audio-lfs64.patch + disable-moz-stackwalk.patch + fix-fortify-system-wrappers.patch + fix-rust-target.patch + fix-webrtc-glibcisms.patch + icu74.patch + lfs64.patch + llvm18-bindgen.patch + llvm18.patch + moz-system-jpeg.patch + no-ccache-stats.patch + nrappkit-qsort.patch + ppc-musttail.patch + ppc-webrtc.patch + python-deps.patch + rust-lto-thin.patch + rust1.78-packed-to-portable_simd.patch + rust1.78-qcms-stdsimd.patch + sandbox-fork.patch + sandbox-largefile.patch + sandbox-sched_setscheduler.patch + + stab.h + + mozilla-location.keys + vendor-prefs.js + + zotero.desktop + https://lab.ilot.io/mirrors/zotero-client/-/releases/$_gittag/downloads/tarball/zotero-client-$_gittag.tar.gz + zotero_build-modifications.patch + zotero_test-drop-build.patch + zotero_test-fix-chars.patch + zotero_test-push-timeout-to-30sec.patch + zotero_drop-jazzer.patch + " + +builddir="$srcdir"/firefox-$_fxver +_zoterodir="$srcdir"/zotero-client-$_gittag +_mozappdir=/usr/lib/zotero + +# help our shared-object scanner to find the libs +ldpath="$_mozappdir" + +# we need this because cargo verifies checksums of all files in vendor +# crates when it builds and gives us no way to override or update the +# file sanely... so just clear out the file list +_clear_vendor_checksums() { + sed -i 's/\("files":{\)[^}]*/\1/' third_party/rust/$1/.cargo-checksum.json +} + +export SHELL=/bin/sh +export BUILD_OFFICIAL=1 +export MOZILLA_OFFICIAL=1 +export USE_SHORT_LIBNAME=1 +export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system +export MOZ_APP_PROFILE="mozilla/firefox" +export MOZ_APP_REMOTINGNAME=firefox-esr +export MOZBUILD_STATE_PATH="$srcdir"/mozbuild +# disable desktop notifications +export MOZ_NOSPAM=1 +# Find our triplet JSON +export RUST_TARGET="$CTARGET" + +# Build with Clang, takes less RAM +export CC="clang" +export CXX="clang++" + +# set rpath so linker finds the libs +export LDFLAGS="$LDFLAGS -Wl,-rpath,$_mozappdir" + +# let firefox do this itself. +unset CARGO_PROFILE_RELEASE_OPT_LEVEL +unset CARGO_PROFILE_RELEASE_LTO + +export CFLAGS="${CFLAGS/-fstack-clash-protection/} -g0 -O2" +export CXXFLAGS="${CXXFLAGS/-fstack-clash-protection/} -g0 -O2 -Wno-deprecated-builtins -Wno-deprecated-declarations" + +prepare() { + # zotero prepare + mv "$_zoterodir" "$builddir"/zotero + ( + cd "$builddir"/zotero + + # checks that we're using expected fx version + local _exp_fxver=$(grep GECKO_VERSION_LINUX "$builddir"/zotero/app/config.sh | sed 's|.*=||' | tr -d '"' | sed 's|esr||') + if [ "$_fxver" != "$_exp_fxver" ]; then + msg "Expected firefox version $_exp_fxver, got $_fxver" + return 1 + fi + + # zotero build expects to be in a git repo + git init + git config user.name info + git config user.email info@example.org + git commit --allow-empty -m 'Initial' + + npm i --legacy-peer-deps + ) + default_prepare + + rm -rf third_party/rust/packed_simd/ + cp "$srcdir"/stab.h toolkit/crashreporter/google-breakpad/src/ + + _clear_vendor_checksums audio_thread_priority + _clear_vendor_checksums bindgen + + base64 -d "$srcdir"/mozilla-location.keys > "$builddir"/mozilla-api-key + + # webrtc does not build on these + case "$CARCH" in + ppc64le) + local webrtc_config="ac_add_options --disable-webrtc" + ;; + esac + case "$CARCH" in + armv7) + # broken here + local rust_simd="ac_add_options --disable-rust-simd" + ;; + *) + local rust_simd="ac_add_options --enable-rust-simd" + ;; + esac + + case "$CARCH" in + aarch64|arm*|x86*) + # disable-elf-hack: exists only on aarch64, arm*, x86, x86_64 + local arch_config="ac_add_options --disable-elf-hack" + ;; + esac + + # sandbox only supported here + case "$CARCH" in + x86*|armv7|aarch64) + local sandbox="ac_add_options --enable-sandbox" + ;; + *) + local sandbox="ac_add_options --disable-sandbox" + ;; + esac + + cat > base-mozconfig <<-EOF + # disable unwanted things + ac_add_options --disable-bootstrap + ac_add_options --disable-cargo-incremental + ac_add_options --disable-crashreporter + ac_add_options --disable-debug + ac_add_options --disable-debug-symbols + ac_add_options --disable-install-strip + ac_add_options --disable-jemalloc + ac_add_options --disable-strip + ac_add_options --disable-tests + ac_add_options --disable-updater + + # features + ac_add_options --enable-alsa + ac_add_options --enable-dbus + ac_add_options --enable-default-toolkit=cairo-gtk3-wayland + ac_add_options --enable-ffmpeg + ac_add_options --enable-hardening + ac_add_options --enable-linker=lld + ac_add_options --enable-necko-wifi + ac_add_options --enable-official-branding + ac_add_options --enable-optimize="$CFLAGS" + ac_add_options --enable-pulseaudio + ac_add_options --enable-release + ac_add_options --enable-update-channel=release + + # system libs + ac_add_options --enable-system-pixman + ac_add_options --with-system-ffi + ac_add_options --with-system-icu + ac_add_options --with-system-jpeg + ac_add_options --with-system-libevent + ac_add_options --with-system-libvpx + ac_add_options --with-system-nspr + ac_add_options --with-system-nss + ac_add_options --with-system-png + ac_add_options --with-system-webp + ac_add_options --with-system-zlib + + # misc + ac_add_options --allow-addon-sideload + ac_add_options --prefix=/usr + ac_add_options --with-app-name=firefox-esr + ac_add_options --with-distribution-id=org.alpinelinux + ac_add_options --with-libclang-path=/usr/lib + ac_add_options --with-unsigned-addon-scopes=app,system + ac_add_options --with-wasi-sysroot=/usr/share/wasi-sysroot + ac_add_options --host=$CHOST + ac_add_options --target=$CTARGET + + # objdir + mk_add_options MOZ_OBJDIR="$builddir/obj" + + mk_add_options RUSTFLAGS="$RUSTFLAGS" + + # keys + # these are for alpine linux use only + ac_add_options --with-mozilla-api-keyfile="$builddir/mozilla-api-key" + + $arch_config + $rust_simd + $sandbox + $webrtc_config + EOF +} + +build() { + cat > .mozconfig base-mozconfig + + export MOZ_BUILD_DATE=$(date ${SOURCE_DATE_EPOCH:+ -d@${SOURCE_DATE_EPOCH}} "+%Y%m%d%H%M%S") + + # for lto + ulimit -n 4096 + + # can't be set here and fail + unset RUSTFLAGS + + local thinlto_jobs=${JOBS:-1} + + case "$CARCH" in + # on this platforms, lld seems to not utilise >1 threads for thinlto for some reason. + # at the same time, having more than 8 also crashes lld for firefox buildsystems (why?). + aarch64) + if [ $thinlto_jobs -gt 8 ]; then + thinlto_jobs=8 + fi + ;; + esac + + export LDFLAGS="$LDFLAGS -Wl,--thinlto-jobs=$thinlto_jobs" + + case "$CARCH" in + # lto for 64-bit systems only + aarch64|x86_64|ppc64le) + cat > .mozconfig base-mozconfig <<-EOF + ac_add_options --enable-lto=cross + EOF + esac + + ./mach build + + # install to where zotero expects it + DESTDIR="$builddir"/zotero/app/xulrunner/firefox ./mach install + mv "$builddir"/zotero/app/xulrunner/firefox/usr/lib/firefox-esr/* "$builddir"/zotero/app/xulrunner/firefox/. + rm -R "$builddir"/zotero/app/xulrunner/firefox/usr + + # zotero build + ( + cd "$builddir"/zotero + NODE_OPTIONS=--openssl-legacy-provider npm run build + + SKIP_32=1 app/scripts/dir_build -p l + # move to seperate folder as check will rebuild with test files added + mv "$builddir"/zotero/app/staging "$builddir"/zotero/app/package + ) + + rm -R "$builddir"/zotero/app/xulrunner/firefox # clean-up unused firefox install +} + +check() { + # install to where zotero expects it + DESTDIR="$builddir"/zotero/app/xulrunner/firefox ./mach install + mv "$builddir"/zotero/app/xulrunner/firefox/usr/lib/firefox-esr/* "$builddir"/zotero/app/xulrunner/firefox/. + rm -R "$builddir"/zotero/app/xulrunner/firefox/usr + + # zotero test build + ( + cd "$builddir"/zotero + ZOTERO_TEST=1 SKIP_32=1 app/scripts/dir_build -p l + + ) + + # test-suite is not very stable, false failure occur from time to time, thus never fails + CI=true LD_LIBRARY_PATH="$builddir"/zotero/app/staging/Zotero_linux xvfb-run "$builddir"/zotero/test/runtests.sh -x "$builddir"/zotero/app/staging/Zotero_linux/zotero || true + + rm -R "$builddir"/zotero/app/xulrunner/firefox # clean-up unused firefox install +} + +package() { + install -dDm755 "$pkgdir"/usr/bin + install -dDm755 "$pkgdir"/usr/lib/zotero + cp -r "$builddir"/zotero/app/package/Zotero_linux/* "$pkgdir/usr/lib/zotero" + ln -s /usr/lib/zotero/zotero "$pkgdir/usr/bin/zotero" + install -Dm644 "$srcdir/zotero.desktop" "$pkgdir/usr/share/applications/zotero.desktop" + + # Copy zotero icons to a standard location + install -Dm644 "$pkgdir/usr/lib/zotero/icons/icon32.png" "$pkgdir/usr/share/icons/hicolor/32x32/apps/zotero.png" + install -Dm644 "$pkgdir/usr/lib/zotero/icons/icon64.png" "$pkgdir/usr/share/icons/hicolor/64x64/apps/zotero.png" + install -Dm644 "$pkgdir/usr/lib/zotero/icons/icon128.png" "$pkgdir/usr/share/icons/hicolor/128x128/apps/zotero.png" + + # Close shell when launching + sed -i -r 's:^("\$CALLDIR/zotero-bin" -app "\$CALLDIR/application.ini" "\$@"):exec \1:' "$pkgdir/usr/lib/zotero/zotero" +} + +sha512sums=" +9ccaede2fcda13a07f98a2110bb8f99c7324601d66bff311f3070a669576a1598fe1d7de2d005d725d1f44dbe3934a9c0fd0b7950f60686047d4ce8d9d812310 firefox-115.9.1esr.source.tar.xz +3e0501ae7a650346c667dfdc0ae0ca286084f22e89ab2ac671cc0d7315673dc5b6dcb9f9882f6f39d26e9a31e57f7a0fd53d6b805e520224e22b8976850e2eb8 audio-lfs64.patch +454ea3263cabce099accbdc47aaf83be26a19f8b5a4568c01a7ef0384601cf8315efd86cd917f9c8bf419c2c845db89a905f3ff9a8eb0c8e41042e93aa96a85c disable-moz-stackwalk.patch +2f4f15974d52de4bb273b62a332d13620945d284bbc6fe6bd0a1f58ff7388443bc1d3bf9c82cc31a8527aad92b0cd3a1bc41d0af5e1800e0dcbd7033e58ffd71 fix-fortify-system-wrappers.patch +cd68b89e29e5f6379fbd5679db27b9a5ef70ea65e51c0d0a8137e1f1fd210e35a8cfb047798e9549bc7275606d7ec5c8d8af1335d29da4699db7acd8bc7ff556 fix-rust-target.patch +305c874fdea3096e9c4c6aa6520ac64bb1c347c4b59db8360096646593fe684c3b5377874d91cecd33d56d1410b4714fbdea2b514923723ecbeff79d51265d9b fix-webrtc-glibcisms.patch +afabea91b328c5a68eaa20f9099ac7b2d0e7f2423e816b05ed168bdd326a5684fa02de08bf05c6033e9b888f02775d1b0443a00329b7a632ee399122a391c13a icu74.patch +5fa9382c692e4bd6a2634308f24a6526fd12a60a2563d2090056d43a60505df3ec9881bbf54562e69394467529b3b0dc45955afca46ed329af03cea074fff070 lfs64.patch +d7a9443cd81d3ef4a6baa1b5d05f2497bc07c1de815a4d85b613b734989e7c589019dd860ea2eb9e32067973efbfd1c913790c6c238778da23d76fbd904128d1 llvm18-bindgen.patch +8c4de34188f634833d99d17bc389c43ab9576b3f0581387407ae77f636a890779cd02786b632fbdfd8b0305575517d51b04f76b9aa3f1a94c3d822578286fc6f llvm18.patch +e28b1fe2967d46c888b41a0a03ee1b6de763124a0281b68aebac04ec3b76cb6fdb56a376d419a003fd87f79e9d086aafd4aaa24efa3345f9857352d3d489356f moz-system-jpeg.patch +c0437a6753f3f350968fa12d250efdfe1bea77baf0e4c06b072b5cc9e78c774dbf4506bc536337030d349fb3ba4460097b75b0c7c5b8fb2d39d8b0a392948936 no-ccache-stats.patch +b586ddb21b50fa8fba798c3a269518049c38cc52fd91ad00e96a3f1144e6b2879d9df1a182a2fb181898042043ae98381a70d0e4acbf8aa705d2b4f62c17a5a1 nrappkit-qsort.patch +2d8dff86212d6d2a904cbb5a5a1d6c17b89adc929fc6a3f4c6cb669f5e83ecddff5a799225319ba445a187b04d111251af75dd3ce8a039164bc14d2a432a2a04 ppc-musttail.patch +6f60e83599041db1b707c21784197ea9816b2c936b89a274bfc24554a600981e6f28448fe41fab0942bd31acd49b1c00beb2eb0961149f2ffa6a4154be123ea7 ppc-webrtc.patch +4e40b34c5f77a1a21fe971a6fcd8a21b1a63423a3a7932a5a6e1c7a2779f9f06a561c806614a01931679a4b1c6afdfd8ae1f3cc6b673f259ccd368e8e54f6e90 python-deps.patch +1c6918dd6655d3a1251bfd4af2e1c561cbb00d540a883b4c1ebf7f5de530d754d9ac07b4b5f56cdab6c511d25c8910ec94043f5733e97501a67abffe1bafaeb1 rust-lto-thin.patch +e4795b88e572bb3b6f009dbacc7872b59db2f8facbe2b07f14dd4f45a77c22049783581869f18c6bb3f04d6edb3da59347278321cce2bfa629a4d35e136cda5c rust1.78-packed-to-portable_simd.patch +eae1afad93cc5fa7699b156619600ca4b41e67943b8b6e05ab972d449aece93bbf1e68a5ea1a7b1c9278633dbf7cf31503255558e3e06ddf168b3937a0e014e8 rust1.78-qcms-stdsimd.patch +2518f2fc75b5db30058e0735f47d60fdf1e7adfaeee4b33fb2afb1bd9a616ce943fd88f4404d0802d4083703f4acf1d5ad42377218d025bc768807fbaf7e1609 sandbox-fork.patch +b7d0a6126bdf6c0569f80aabf5b37ed2c7a35712eb8a0404a2d85381552f5555d4f97d213ea26cec6a45dc2785f22439376ed5f8e78b4fd664ef0223307b333e sandbox-largefile.patch +f8c3555ef6207933cbffbf4fc101a9b4c0d2990c0063162f0f0bde70ef0b46f86bfac42e7110695183424a87948de593f3927b2d8509ede3e4fc7bd8a1fad1ce sandbox-sched_setscheduler.patch +0b3f1e4b9fdc868e4738b5c81fd6c6128ce8885b260affcb9a65ff9d164d7232626ce1291aaea70132b3e3124f5e13fef4d39326b8e7173e362a823722a85127 stab.h +382510375b1a2fa79be0ab79e3391a021ae2c022429ffbaa7e7a69166f99bb56d01e59a1b10688592a29238f21c9d6977672bd77f9fae439b66bdfe0c55ddb15 mozilla-location.keys +fc45bc3ffb9404e5338ea26a9f04807b40f6f516324972cddd48bedb91b8bd7c6b8d4e03a0209020f5e67b703bc4ff89389985791b9bd544a0fc3951e2dc338e vendor-prefs.js +e1a0a4ff5cc1b53f13776ca11927d671426b0691e78e74a4adf2166d57bb2ae8ac409cc11a37ce5e2f680fdf05d5bc3849c33a9717aca1bb62d03ae5231a67fb zotero.desktop +4d6146d127153bfe7069e32cc3e4ec4c491d8cc4371034d569427bdf486d1cd39ade8e668cfe7dd0453844f935a4eba60832dd5492a247236fac75ce6928e36a zotero-client-7.0.0.tar.gz +746dbabbb3ea9199d17891e2079b9256d04843f548132178862117d2334694d98e2cc981945d72f31d0e5b2c42904d371633f6905996bb580aa0b5ae95c64ddc zotero_build-modifications.patch +337070ee4c44ccb35c6b6290c18327740bb9fccfd1a6ad1045782e83daa290b6ced7d53955d3a889f661d588738a64f2e7f383639f4c46be9fdf891168abc9ff zotero_test-drop-build.patch +f0e4f09496531222e8400959f9ef12852bca269eb3bf4c3b87ccaf92f28a12b9374461a1c79ad294a4393dbe30800aa1c85497033d0bc304fa8c198dfab3efd2 zotero_test-fix-chars.patch +9dc390d8bae42e645cae45fe5551751d8f38d5c1b8b2cc0eec1c2191f4bde293ffb2c67cfc4de765f2d48b1da4d5fcd4f1c03711e5da3180cd1b63710ccf5599 zotero_test-push-timeout-to-30sec.patch +7fb791a386d30594a11ae3856295d5081000de7525036eb0b5836505bd4f0b13a4fe706400ad7efe00b75c2112cf3d59ea3542b6179ccd80f7ee1889349f441d zotero_drop-jazzer.patch +" diff --git a/user/zotero/audio-lfs64.patch b/user/zotero/audio-lfs64.patch new file mode 100644 index 0000000..c34671a --- /dev/null +++ b/user/zotero/audio-lfs64.patch @@ -0,0 +1,61 @@ +--- a/third_party/rust/audio_thread_priority/src/rt_linux.rs ++++ b/third_party/rust/audio_thread_priority/src/rt_linux.rs +@@ -112,7 +112,7 @@ + + /// Returns the maximum priority, maximum real-time time slice, and the current real-time time + /// slice for this process. +-fn get_limits() -> Result<(i64, u64, libc::rlimit64), AudioThreadPriorityError> { ++fn get_limits() -> Result<(i64, u64, libc::rlimit), AudioThreadPriorityError> { + let c = Connection::get_private(BusType::System)?; + + let p = Props::new( +@@ -122,7 +122,7 @@ + "org.freedesktop.RealtimeKit1", + DBUS_SOCKET_TIMEOUT, + ); +- let mut current_limit = libc::rlimit64 { ++ let mut current_limit = libc::rlimit { + rlim_cur: 0, + rlim_max: 0, + }; +@@ -141,9 +141,9 @@ + )); + } + +- if unsafe { libc::getrlimit64(libc::RLIMIT_RTTIME, &mut current_limit) } < 0 { ++ if unsafe { libc::getrlimit(libc::RLIMIT_RTTIME, &mut current_limit) } < 0 { + return Err(AudioThreadPriorityError::new_with_inner( +- "getrlimit64", ++ "getrlimit", + Box::new(OSError::last_os_error()), + )); + } +@@ -154,13 +154,13 @@ + fn set_limits(request: u64, max: u64) -> Result<(), AudioThreadPriorityError> { + // Set a soft limit to the limit requested, to be able to handle going over the limit using + // SIGXCPU. Set the hard limit to the maxium slice to prevent getting SIGKILL. +- let new_limit = libc::rlimit64 { ++ let new_limit = libc::rlimit { + rlim_cur: request, + rlim_max: max, + }; +- if unsafe { libc::setrlimit64(libc::RLIMIT_RTTIME, &new_limit) } < 0 { ++ if unsafe { libc::setrlimit(libc::RLIMIT_RTTIME, &new_limit) } < 0 { + return Err(AudioThreadPriorityError::new_with_inner( +- "setrlimit64", ++ "setrlimit", + Box::new(OSError::last_os_error()), + )); + } +@@ -296,9 +296,9 @@ + match r { + Ok(_) => Ok(handle), + Err(e) => { +- if unsafe { libc::setrlimit64(libc::RLIMIT_RTTIME, &limits) } < 0 { ++ if unsafe { libc::setrlimit(libc::RLIMIT_RTTIME, &limits) } < 0 { + return Err(AudioThreadPriorityError::new_with_inner( +- "setrlimit64", ++ "setrlimit", + Box::new(OSError::last_os_error()), + )); + } diff --git a/user/zotero/disable-moz-stackwalk.patch b/user/zotero/disable-moz-stackwalk.patch new file mode 100644 index 0000000..b6bc756 --- /dev/null +++ b/user/zotero/disable-moz-stackwalk.patch @@ -0,0 +1,18 @@ +diff --git a/mozglue/misc/StackWalk.cpp b/mozglue/misc/StackWalk.cpp +index 7d62921..adcfa44 100644 +--- a/mozglue/misc/StackWalk.cpp ++++ b/mozglue/misc/StackWalk.cpp +@@ -33,13 +33,7 @@ using namespace mozilla; + # define MOZ_STACKWALK_SUPPORTS_MACOSX 0 + #endif + +-#if (defined(linux) && \ +- ((defined(__GNUC__) && (defined(__i386) || defined(PPC))) || \ +- defined(HAVE__UNWIND_BACKTRACE))) +-# define MOZ_STACKWALK_SUPPORTS_LINUX 1 +-#else + # define MOZ_STACKWALK_SUPPORTS_LINUX 0 +-#endif + + #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) + # define HAVE___LIBC_STACK_END 1 diff --git a/user/zotero/fix-fortify-system-wrappers.patch b/user/zotero/fix-fortify-system-wrappers.patch new file mode 100644 index 0000000..17cf7e3 --- /dev/null +++ b/user/zotero/fix-fortify-system-wrappers.patch @@ -0,0 +1,13 @@ +The wrapper features.h gets pulled in by system headers causing thigns to +break. We work around it by simply not wrap features.h + +--- ./config/system-headers.mozbuild.orig ++++ ./config/system-headers.mozbuild +@@ -229,7 +229,6 @@ + 'execinfo.h', + 'extras.h', + 'fcntl.h', +- 'features.h', + 'fenv.h', + 'ffi.h', + 'fibdef.h', diff --git a/user/zotero/fix-rust-target.patch b/user/zotero/fix-rust-target.patch new file mode 100644 index 0000000..9342063 --- /dev/null +++ b/user/zotero/fix-rust-target.patch @@ -0,0 +1,31 @@ +Allow us to just set RUST_TARGEt ourselves instead of hacking around in mozilla's +weird custom build system... + +--- a/build/moz.configure/rust.configure ++++ b/build/moz.configure/rust.configure +@@ -225,7 +225,9 @@ + data.setdefault(key, []).append(namespace(rust_target=t, target=info)) + return data + +- ++@imports('os') ++@imports(_from='mozbuild.util', _import='ensure_unicode') ++@imports(_from='mozbuild.util', _import='system_encoding') + def detect_rustc_target( + host_or_target, compiler_info, arm_target, rust_supported_targets + ): +@@ -340,13 +342,13 @@ + + return None + +- rustc_target = find_candidate(candidates) ++ rustc_target = os.environ['RUST_TARGET'] + + if rustc_target is None: + die("Don't know how to translate {} for rustc".format(host_or_target.alias)) + +- return rustc_target ++ return ensure_unicode(rustc_target, system_encoding) + + + @imports('os') diff --git a/user/zotero/fix-webrtc-glibcisms.patch b/user/zotero/fix-webrtc-glibcisms.patch new file mode 100644 index 0000000..4f9043b --- /dev/null +++ b/user/zotero/fix-webrtc-glibcisms.patch @@ -0,0 +1,20 @@ +--- a/third_party/libwebrtc/system_wrappers/source/cpu_features_linux.cc ++++ b/third_party/libwebrtc/system_wrappers/source/cpu_features_linux.cc +@@ -18,7 +18,7 @@ + #define WEBRTC_GLIBC_PREREQ(a, b) 0 + #endif + +-#if WEBRTC_GLIBC_PREREQ(2, 16) ++#if !__GLIBC__ || WEBRTC_GLIBC_PREREQ(2, 16) + #include + #else + #include +@@ -40,7 +40,7 @@ + int architecture = 0; + uint64_t hwcap = 0; + const char* platform = NULL; +-#if WEBRTC_GLIBC_PREREQ(2, 16) ++#if !__GLIBC__ || WEBRTC_GLIBC_PREREQ(2, 16) + hwcap = getauxval(AT_HWCAP); + platform = (const char*)getauxval(AT_PLATFORM); + #else diff --git a/user/zotero/icu74.patch b/user/zotero/icu74.patch new file mode 100644 index 0000000..46c9445 --- /dev/null +++ b/user/zotero/icu74.patch @@ -0,0 +1,38 @@ +https://bugzilla.mozilla.org/show_bug.cgi?id=1862601 + +# HG changeset patch +# User André Bargull +# Date 1697435923 -7200 +# Node ID d5f3b0c4f08a426ce00a153c04e177eecb6820e2 +# Parent c63994f8259efdf6e745c960aa9e1409d5477049 +Bug xxx - Part 12: Add new line break classes. r? + +diff --git a/intl/lwbrk/LineBreaker.cpp b/intl/lwbrk/LineBreaker.cpp +--- a/intl/lwbrk/LineBreaker.cpp ++++ b/intl/lwbrk/LineBreaker.cpp +@@ -443,17 +443,23 @@ static int8_t GetClass(uint32_t u, LineB + /* JT = 34, [JT] */ CLASS_CHARACTER, + /* JV = 35, [JV] */ CLASS_CHARACTER, + /* CLOSE_PARENTHESIS = 36, [CP] */ CLASS_CLOSE_LIKE_CHARACTER, + /* CONDITIONAL_JAPANESE_STARTER = 37, [CJ] */ CLASS_CLOSE, + /* HEBREW_LETTER = 38, [HL] */ CLASS_CHARACTER, + /* REGIONAL_INDICATOR = 39, [RI] */ CLASS_CHARACTER, + /* E_BASE = 40, [EB] */ CLASS_BREAKABLE, + /* E_MODIFIER = 41, [EM] */ CLASS_CHARACTER, +- /* ZWJ = 42, [ZWJ]*/ CLASS_CHARACTER}; ++ /* ZWJ = 42, [ZWJ]*/ CLASS_CHARACTER, ++ /* AKSARA = 43, [AK] */ CLASS_CHARACTER, ++ /* AKSARA_PREBASE = 44, [AP] */ CLASS_CHARACTER, ++ /* AKSARA_START = 45, [AS] */ CLASS_CHARACTER, ++ /* VIRAMA_FINAL = 46, [VF] */ CLASS_CHARACTER, ++ /* VIRAMA = 47, [VI] */ CLASS_CHARACTER, ++ }; + + static_assert(U_LB_COUNT == mozilla::ArrayLength(sUnicodeLineBreakToClass), + "Gecko vs ICU LineBreak class mismatch"); + + auto cls = GetLineBreakClass(u); + MOZ_ASSERT(cls < mozilla::ArrayLength(sUnicodeLineBreakToClass)); + + // Overrides based on rules for the different line-break values given in + diff --git a/user/zotero/lfs64.patch b/user/zotero/lfs64.patch new file mode 100644 index 0000000..bae8b5d --- /dev/null +++ b/user/zotero/lfs64.patch @@ -0,0 +1,35 @@ +force stat() instead of stat64() on 32-bit +-- +--- a/xpcom/io/nsLocalFileUnix.h ++++ b/xpcom/io/nsLocalFileUnix.h +@@ -21,7 +21,7 @@ + + // stat64 and lstat64 are deprecated on OS X. Normal stat and lstat are + // 64-bit by default on OS X 10.6+. +-#if defined(HAVE_STAT64) && defined(HAVE_LSTAT64) && !defined(XP_DARWIN) ++#if 0 && defined(HAVE_STAT64) && defined(HAVE_LSTAT64) && !defined(XP_DARWIN) + # if defined(AIX) + # if defined STAT + # undef STAT +--- a/mozglue/baseprofiler/core/shared-libraries-linux.cc ++++ b/mozglue/baseprofiler/core/shared-libraries-linux.cc +@@ -178,7 +178,7 @@ + return false; + } + +-#if defined(__x86_64__) || defined(__aarch64__) || \ ++#if 1 || defined(__x86_64__) || defined(__aarch64__) || \ + (defined(__mips__) && _MIPS_SIM == _ABI64) || \ + !(defined(GP_OS_linux) || defined(GP_OS_android)) + +--- a/security/sandbox/linux/broker/SandboxBrokerUtils.h ++++ b/security/sandbox/linux/broker/SandboxBrokerUtils.h +@@ -15,7 +15,7 @@ + // calls. We'll intercept those and handle them in the stat functions + // but must be sure to use the right structure layout. + +-#if defined(__NR_stat64) || defined(__NR_fstatat64) ++#if 0 && (defined(__NR_stat64) || defined(__NR_fstatat64) ) + typedef struct stat64 statstruct; + # define statsyscall stat64 + # define lstatsyscall lstat64 diff --git a/user/zotero/llvm18-bindgen.patch b/user/zotero/llvm18-bindgen.patch new file mode 100644 index 0000000..67270f3 --- /dev/null +++ b/user/zotero/llvm18-bindgen.patch @@ -0,0 +1,619 @@ +Patch-Source: https://github.com/chimera-linux/cports/blob/899c997/contrib/thunderbird/patches/llvm18-bindgen.patch +https://github.com/rust-lang/rust-bindgen/pull/2689 +-- +diff --git a/ir/item.rs b/ir/item.rs +index 40f6f7d..87d09da 100644 +--- a/third_party/rust/bindgen/ir/item.rs ++++ b/third_party/rust/bindgen/ir/item.rs +@@ -6,8 +6,8 @@ use super::annotations::Annotations; + use super::comp::{CompKind, MethodKind}; + use super::context::{BindgenContext, ItemId, PartialType, TypeId}; + use super::derive::{ +- CanDeriveCopy, CanDeriveDebug, CanDeriveDefault, CanDeriveEq, +- CanDeriveHash, CanDeriveOrd, CanDerivePartialEq, CanDerivePartialOrd, ++ CanDeriveCopy, CanDeriveDebug, CanDeriveDefault, CanDeriveEq, CanDeriveHash, CanDeriveOrd, ++ CanDerivePartialEq, CanDerivePartialOrd, + }; + use super::dot::DotAttributes; + use super::function::{Function, FunctionKind}; +@@ -59,10 +59,7 @@ pub trait ItemCanonicalPath { + /// Get the namespace-aware canonical path for this item. This means that if + /// namespaces are disabled, you'll get a single item, and otherwise you get + /// the whole path. +- fn namespace_aware_canonical_path( +- &self, +- ctx: &BindgenContext, +- ) -> Vec; ++ fn namespace_aware_canonical_path(&self, ctx: &BindgenContext) -> Vec; + + /// Get the canonical path for this item. + fn canonical_path(&self, ctx: &BindgenContext) -> Vec; +@@ -159,11 +156,7 @@ where + { + type Extra = (); + +- fn as_template_param( +- &self, +- ctx: &BindgenContext, +- _: &(), +- ) -> Option { ++ fn as_template_param(&self, ctx: &BindgenContext, _: &()) -> Option { + ctx.resolve_item((*self).into()).as_template_param(ctx, &()) + } + } +@@ -171,11 +164,7 @@ where + impl AsTemplateParam for Item { + type Extra = (); + +- fn as_template_param( +- &self, +- ctx: &BindgenContext, +- _: &(), +- ) -> Option { ++ fn as_template_param(&self, ctx: &BindgenContext, _: &()) -> Option { + self.kind.as_template_param(ctx, self) + } + } +@@ -183,16 +172,10 @@ impl AsTemplateParam for Item { + impl AsTemplateParam for ItemKind { + type Extra = Item; + +- fn as_template_param( +- &self, +- ctx: &BindgenContext, +- item: &Item, +- ) -> Option { ++ fn as_template_param(&self, ctx: &BindgenContext, item: &Item) -> Option { + match *self { + ItemKind::Type(ref ty) => ty.as_template_param(ctx, item), +- ItemKind::Module(..) | +- ItemKind::Function(..) | +- ItemKind::Var(..) => None, ++ ItemKind::Module(..) | ItemKind::Function(..) | ItemKind::Var(..) => None, + } + } + } +@@ -214,10 +197,7 @@ impl ItemCanonicalPath for T + where + T: Copy + Into, + { +- fn namespace_aware_canonical_path( +- &self, +- ctx: &BindgenContext, +- ) -> Vec { ++ fn namespace_aware_canonical_path(&self, ctx: &BindgenContext) -> Vec { + debug_assert!( + ctx.in_codegen_phase(), + "You're not supposed to call this yet" +@@ -282,9 +262,7 @@ impl Trace for Item { + // There are some types, like resolved type references, where we + // don't want to stop collecting types even though they may be + // opaque. +- if ty.should_be_traced_unconditionally() || +- !self.is_opaque(ctx, &()) +- { ++ if ty.should_be_traced_unconditionally() || !self.is_opaque(ctx, &()) { + ty.trace(ctx, tracer, self); + } + } +@@ -450,11 +428,7 @@ impl Item { + } + + /// Construct a new opaque item type. +- pub fn new_opaque_type( +- with_id: ItemId, +- ty: &clang::Type, +- ctx: &mut BindgenContext, +- ) -> TypeId { ++ pub fn new_opaque_type(with_id: ItemId, ty: &clang::Type, ctx: &mut BindgenContext) -> TypeId { + let location = ty.declaration().location(); + let ty = Opaque::from_clang_ty(ty, ctx); + let kind = ItemKind::Type(ty); +@@ -497,12 +471,11 @@ impl Item { + self.ancestors(ctx) + .filter(|id| { + ctx.resolve_item(*id).as_module().map_or(false, |module| { +- !module.is_inline() || +- ctx.options().conservative_inline_namespaces ++ !module.is_inline() || ctx.options().conservative_inline_namespaces + }) + }) +- .count() + +- 1 ++ .count() ++ + 1 + } + + /// Get this `Item`'s comment, if it has any, already preprocessed and with +@@ -577,9 +550,9 @@ impl Item { + pub fn is_toplevel(&self, ctx: &BindgenContext) -> bool { + // FIXME: Workaround for some types falling behind when parsing weird + // stl classes, for example. +- if ctx.options().enable_cxx_namespaces && +- self.kind().is_module() && +- self.id() != ctx.root_module() ++ if ctx.options().enable_cxx_namespaces ++ && self.kind().is_module() ++ && self.id() != ctx.root_module() + { + return false; + } +@@ -593,9 +566,7 @@ impl Item { + + if parent_item.id() == ctx.root_module() { + return true; +- } else if ctx.options().enable_cxx_namespaces || +- !parent_item.kind().is_module() +- { ++ } else if ctx.options().enable_cxx_namespaces || !parent_item.kind().is_module() { + return false; + } + +@@ -656,15 +627,13 @@ impl Item { + + let path = self.path_for_allowlisting(ctx); + let name = path[1..].join("::"); +- ctx.options().blocklisted_items.matches(&name) || +- match self.kind { ++ ctx.options().blocklisted_items.matches(&name) ++ || match self.kind { + ItemKind::Type(..) => { +- ctx.options().blocklisted_types.matches(&name) || +- ctx.is_replaced_type(path, self.id) +- } +- ItemKind::Function(..) => { +- ctx.options().blocklisted_functions.matches(&name) ++ ctx.options().blocklisted_types.matches(&name) ++ || ctx.is_replaced_type(path, self.id) + } ++ ItemKind::Function(..) => ctx.options().blocklisted_functions.matches(&name), + // TODO: Add constant / namespace blocklisting? + ItemKind::Var(..) | ItemKind::Module(..) => false, + } +@@ -723,12 +692,7 @@ impl Item { + } + + /// Helper function for full_disambiguated_name +- fn push_disambiguated_name( +- &self, +- ctx: &BindgenContext, +- to: &mut String, +- level: u8, +- ) { ++ fn push_disambiguated_name(&self, ctx: &BindgenContext, to: &mut String, level: u8) { + to.push_str(&self.canonical_name(ctx)); + if let ItemKind::Type(ref ty) = *self.kind() { + if let TypeKind::TemplateInstantiation(ref inst) = *ty.kind() { +@@ -791,16 +755,14 @@ impl Item { + + match *self.kind() { + ItemKind::Var(ref var) => var.name().to_owned(), +- ItemKind::Module(ref module) => { +- module.name().map(ToOwned::to_owned).unwrap_or_else(|| { +- format!("_bindgen_mod_{}", self.exposed_id(ctx)) +- }) +- } +- ItemKind::Type(ref ty) => { +- ty.sanitized_name(ctx).map(Into::into).unwrap_or_else(|| { +- format!("_bindgen_ty_{}", self.exposed_id(ctx)) +- }) +- } ++ ItemKind::Module(ref module) => module ++ .name() ++ .map(ToOwned::to_owned) ++ .unwrap_or_else(|| format!("_bindgen_mod_{}", self.exposed_id(ctx))), ++ ItemKind::Type(ref ty) => ty ++ .sanitized_name(ctx) ++ .map(Into::into) ++ .unwrap_or_else(|| format!("_bindgen_ty_{}", self.exposed_id(ctx))), + ItemKind::Function(ref fun) => { + let mut name = fun.name().to_owned(); + +@@ -839,11 +801,7 @@ impl Item { + /// If `BindgenOptions::disable_nested_struct_naming` is true then returned + /// name is the inner most non-anonymous name plus all the anonymous base names + /// that follows. +- pub fn real_canonical_name( +- &self, +- ctx: &BindgenContext, +- opt: &NameOptions, +- ) -> String { ++ pub fn real_canonical_name(&self, ctx: &BindgenContext, opt: &NameOptions) -> String { + let target = ctx.resolve_item(self.name_target(ctx)); + + // Short-circuit if the target has an override, and just use that. +@@ -874,9 +832,7 @@ impl Item { + }) + .filter(|id| { + if !ctx.options().conservative_inline_namespaces { +- if let ItemKind::Module(ref module) = +- *ctx.resolve_item(*id).kind() +- { ++ if let ItemKind::Module(ref module) = *ctx.resolve_item(*id).kind() { + return !module.is_inline(); + } + } +@@ -947,9 +903,9 @@ impl Item { + let ty_kind = self.kind().as_type().map(|t| t.kind()); + if let Some(ty_kind) = ty_kind { + match *ty_kind { +- TypeKind::Comp(..) | +- TypeKind::TemplateInstantiation(..) | +- TypeKind::Enum(..) => return self.local_id(ctx).to_string(), ++ TypeKind::Comp(..) | TypeKind::TemplateInstantiation(..) | TypeKind::Enum(..) => { ++ return self.local_id(ctx).to_string() ++ } + _ => {} + } + } +@@ -990,8 +946,7 @@ impl Item { + + match *type_.kind() { + TypeKind::Enum(ref enum_) => { +- enum_.computed_enum_variation(ctx, self) == +- EnumVariation::ModuleConsts ++ enum_.computed_enum_variation(ctx, self) == EnumVariation::ModuleConsts + } + TypeKind::Alias(inner_id) => { + // TODO(emilio): Make this "hop through type aliases that aren't +@@ -1018,18 +973,12 @@ impl Item { + ItemKind::Type(_) => cc.types(), + ItemKind::Function(ref f) => match f.kind() { + FunctionKind::Function => cc.functions(), +- FunctionKind::Method(MethodKind::Constructor) => { +- cc.constructors() +- } +- FunctionKind::Method(MethodKind::Destructor) | +- FunctionKind::Method(MethodKind::VirtualDestructor { +- .. +- }) => cc.destructors(), +- FunctionKind::Method(MethodKind::Static) | +- FunctionKind::Method(MethodKind::Normal) | +- FunctionKind::Method(MethodKind::Virtual { .. }) => { +- cc.methods() +- } ++ FunctionKind::Method(MethodKind::Constructor) => cc.constructors(), ++ FunctionKind::Method(MethodKind::Destructor) ++ | FunctionKind::Method(MethodKind::VirtualDestructor { .. }) => cc.destructors(), ++ FunctionKind::Method(MethodKind::Static) ++ | FunctionKind::Method(MethodKind::Normal) ++ | FunctionKind::Method(MethodKind::Virtual { .. }) => cc.methods(), + }, + } + } +@@ -1041,14 +990,9 @@ impl Item { + .borrow_with(|| self.compute_path(ctx, UserMangled::No)) + } + +- fn compute_path( +- &self, +- ctx: &BindgenContext, +- mangled: UserMangled, +- ) -> Vec { ++ fn compute_path(&self, ctx: &BindgenContext, mangled: UserMangled) -> Vec { + if let Some(path) = self.annotations().use_instead_of() { +- let mut ret = +- vec![ctx.resolve_item(ctx.root_module()).name(ctx).get()]; ++ let mut ret = vec![ctx.resolve_item(ctx.root_module()).name(ctx).get()]; + ret.extend_from_slice(path); + return ret; + } +@@ -1059,10 +1003,9 @@ impl Item { + .chain(iter::once(ctx.root_module().into())) + .map(|id| ctx.resolve_item(id)) + .filter(|item| { +- item.id() == target.id() || +- item.as_module().map_or(false, |module| { +- !module.is_inline() || +- ctx.options().conservative_inline_namespaces ++ item.id() == target.id() ++ || item.as_module().map_or(false, |module| { ++ !module.is_inline() || ctx.options().conservative_inline_namespaces + }) + }) + .map(|item| { +@@ -1123,9 +1066,9 @@ impl IsOpaque for Item { + ctx.in_codegen_phase(), + "You're not supposed to call this yet" + ); +- self.annotations.opaque() || +- self.as_type().map_or(false, |ty| ty.is_opaque(ctx, self)) || +- ctx.opaque_by_name(self.path_for_allowlisting(ctx)) ++ self.annotations.opaque() ++ || self.as_type().map_or(false, |ty| ty.is_opaque(ctx, self)) ++ || ctx.opaque_by_name(self.path_for_allowlisting(ctx)) + } + } + +@@ -1225,11 +1168,7 @@ impl HasFloat for Item { + pub type ItemSet = BTreeSet; + + impl DotAttributes for Item { +- fn dot_attributes( +- &self, +- ctx: &BindgenContext, +- out: &mut W, +- ) -> io::Result<()> ++ fn dot_attributes(&self, ctx: &BindgenContext, out: &mut W) -> io::Result<()> + where + W: io::Write, + { +@@ -1306,17 +1245,10 @@ fn visit_child( + } + + impl Item { +- pub(crate) fn builtin_type( +- kind: TypeKind, +- is_const: bool, +- ctx: &mut BindgenContext, +- ) -> TypeId { ++ pub(crate) fn builtin_type(kind: TypeKind, is_const: bool, ctx: &mut BindgenContext) -> TypeId { + // Feel free to add more here, I'm just lazy. + match kind { +- TypeKind::Void | +- TypeKind::Int(..) | +- TypeKind::Pointer(..) | +- TypeKind::Float(..) => {} ++ TypeKind::Void | TypeKind::Int(..) | TypeKind::Pointer(..) | TypeKind::Float(..) => {} + _ => panic!("Unsupported builtin type"), + } + +@@ -1428,52 +1360,44 @@ impl Item { + } + + // Guess how does clang treat extern "C" blocks? +- if cursor.kind() == CXCursor_UnexposedDecl { +- Err(ParseError::Recurse) +- } else { ++ match cursor.kind() { ++ // On Clang 18+, extern "C" is reported accurately as a LinkageSpec. ++ // Older LLVM treat it as UnexposedDecl. ++ CXCursor_LinkageSpec | CXCursor_UnexposedDecl => Err(ParseError::Recurse), + // We allowlist cursors here known to be unhandled, to prevent being + // too noisy about this. +- match cursor.kind() { +- CXCursor_MacroDefinition | +- CXCursor_MacroExpansion | +- CXCursor_UsingDeclaration | +- CXCursor_UsingDirective | +- CXCursor_StaticAssert | +- CXCursor_FunctionTemplate => { +- debug!( +- "Unhandled cursor kind {:?}: {:?}", +- cursor.kind(), +- cursor +- ); +- } +- CXCursor_InclusionDirective => { +- let file = cursor.get_included_file_name(); +- match file { +- None => { +- warn!( +- "Inclusion of a nameless file in {:?}", +- cursor +- ); +- } +- Some(filename) => { +- ctx.include_file(filename); +- } +- } +- } +- _ => { +- // ignore toplevel operator overloads +- let spelling = cursor.spelling(); +- if !spelling.starts_with("operator") { +- warn!( +- "Unhandled cursor kind {:?}: {:?}", +- cursor.kind(), +- cursor +- ); +- } +- } ++ CXCursor_MacroDefinition ++ | CXCursor_MacroExpansion ++ | CXCursor_UsingDeclaration ++ | CXCursor_UsingDirective ++ | CXCursor_StaticAssert ++ | CXCursor_FunctionTemplate => { ++ debug!("Unhandled cursor kind {:?}: {:?}", cursor.kind(), cursor); ++ Err(ParseError::Continue) + } + +- Err(ParseError::Continue) ++ CXCursor_InclusionDirective => { ++ let file = cursor.get_included_file_name(); ++ match file { ++ None => { ++ warn!("Inclusion of a nameless file in {:?}", cursor); ++ } ++ Some(included_file) => { ++ for cb in &ctx.options().parse_callbacks { ++ cb.include_file(&included_file); ++ } ++ } ++ } ++ Err(ParseError::Continue) ++ } ++ _ => { ++ // ignore toplevel operator overloads ++ let spelling = cursor.spelling(); ++ if !spelling.starts_with("operator") { ++ warn!("Unhandled cursor kind {:?}: {:?}", cursor.kind(), cursor); ++ } ++ Err(ParseError::Continue) ++ } + } + } + +@@ -1511,22 +1435,11 @@ impl Item { + + if ctx.collected_typerefs() { + debug!("refs already collected, resolving directly"); +- return Item::from_ty_with_id( +- potential_id, +- &ty, +- location, +- parent_id, +- ctx, +- ) +- .unwrap_or_else(|_| Item::new_opaque_type(potential_id, &ty, ctx)); ++ return Item::from_ty_with_id(potential_id, &ty, location, parent_id, ctx) ++ .unwrap_or_else(|_| Item::new_opaque_type(potential_id, &ty, ctx)); + } + +- if let Some(ty) = ctx.builtin_or_resolved_ty( +- potential_id, +- parent_id, +- &ty, +- Some(location), +- ) { ++ if let Some(ty) = ctx.builtin_or_resolved_ty(potential_id, parent_id, &ty, Some(location)) { + debug!("{:?} already resolved: {:?}", ty, location); + return ty; + } +@@ -1586,12 +1499,10 @@ impl Item { + id, ty, location + ); + +- if ty.kind() == clang_sys::CXType_Unexposed || +- location.cur_type().kind() == clang_sys::CXType_Unexposed ++ if ty.kind() == clang_sys::CXType_Unexposed ++ || location.cur_type().kind() == clang_sys::CXType_Unexposed + { +- if ty.is_associated_type() || +- location.cur_type().is_associated_type() +- { ++ if ty.is_associated_type() || location.cur_type().is_associated_type() { + return Ok(Item::new_opaque_type(id, ty, ctx)); + } + +@@ -1618,8 +1529,7 @@ impl Item { + }; + + let comment = decl.raw_comment().or_else(|| location.raw_comment()); +- let annotations = +- Annotations::new(&decl).or_else(|| Annotations::new(&location)); ++ let annotations = Annotations::new(&decl).or_else(|| Annotations::new(&location)); + + if let Some(ref annotations) = annotations { + if let Some(replaced) = annotations.use_instead_of() { +@@ -1627,9 +1537,7 @@ impl Item { + } + } + +- if let Some(ty) = +- ctx.builtin_or_resolved_ty(id, parent_id, ty, Some(location)) +- { ++ if let Some(ty) = ctx.builtin_or_resolved_ty(id, parent_id, ty, Some(location)) { + return Ok(ty); + } + +@@ -1665,9 +1573,7 @@ impl Item { + let result = Type::from_clang_ty(id, ty, location, parent_id, ctx); + let relevant_parent_id = parent_id.unwrap_or(current_module); + let ret = match result { +- Ok(ParseResult::AlreadyResolved(ty)) => { +- Ok(ty.as_type_id_unchecked()) +- } ++ Ok(ParseResult::AlreadyResolved(ty)) => Ok(ty.as_type_id_unchecked()), + Ok(ParseResult::New(item, declaration)) => { + ctx.add_item( + Item::new( +@@ -1698,13 +1604,10 @@ impl Item { + assert_eq!(*finished.decl(), declaration_to_look_for); + } + +- location.visit(|cur| { +- visit_child(cur, id, ty, parent_id, ctx, &mut result) +- }); ++ location.visit(|cur| visit_child(cur, id, ty, parent_id, ctx, &mut result)); + + if valid_decl { +- let partial_ty = +- PartialType::new(declaration_to_look_for, id); ++ let partial_ty = PartialType::new(declaration_to_look_for, id); + ctx.begin_parsing(partial_ty); + } + +@@ -1813,10 +1716,7 @@ impl Item { + // but maintaining these scopes properly would require more changes to + // the whole libclang -> IR parsing code. + +- fn is_template_with_spelling( +- refd: &clang::Cursor, +- spelling: &str, +- ) -> bool { ++ fn is_template_with_spelling(refd: &clang::Cursor, spelling: &str) -> bool { + lazy_static! { + static ref ANON_TYPE_PARAM_RE: regex::Regex = + regex::Regex::new(r"^type\-parameter\-\d+\-\d+$").unwrap(); +@@ -1838,11 +1738,7 @@ impl Item { + } else if location.kind() == clang_sys::CXCursor_TypeRef { + // Situation (2) + match location.referenced() { +- Some(refd) +- if is_template_with_spelling(&refd, &ty_spelling) => +- { +- refd +- } ++ Some(refd) if is_template_with_spelling(&refd, &ty_spelling) => refd, + _ => return None, + } + } else { +@@ -1851,16 +1747,11 @@ impl Item { + + location.visit(|child| { + let child_ty = child.cur_type(); +- if child_ty.kind() == clang_sys::CXCursor_TypeRef && +- child_ty.spelling() == ty_spelling ++ if child_ty.kind() == clang_sys::CXCursor_TypeRef ++ && child_ty.spelling() == ty_spelling + { + match child.referenced() { +- Some(refd) +- if is_template_with_spelling( +- &refd, +- &ty_spelling, +- ) => +- { ++ Some(refd) if is_template_with_spelling(&refd, &ty_spelling) => { + definition = Some(refd); + return clang_sys::CXChildVisit_Break; + } +@@ -1883,12 +1774,7 @@ impl Item { + + if let Some(id) = ctx.get_type_param(&definition) { + if let Some(with_id) = with_id { +- return Some(ctx.build_ty_wrapper( +- with_id, +- id, +- Some(parent), +- &ty, +- )); ++ return Some(ctx.build_ty_wrapper(with_id, id, Some(parent), &ty)); + } else { + return Some(id); + } +@@ -1920,8 +1806,8 @@ impl ItemCanonicalName for Item { + ); + self.canonical_name + .borrow_with(|| { +- let in_namespace = ctx.options().enable_cxx_namespaces || +- ctx.options().disable_name_namespacing; ++ let in_namespace = ++ ctx.options().enable_cxx_namespaces || ctx.options().disable_name_namespacing; + + if in_namespace { + self.name(ctx).within_namespaces().get() +@@ -1934,10 +1820,7 @@ impl ItemCanonicalName for Item { + } + + impl ItemCanonicalPath for Item { +- fn namespace_aware_canonical_path( +- &self, +- ctx: &BindgenContext, +- ) -> Vec { ++ fn namespace_aware_canonical_path(&self, ctx: &BindgenContext) -> Vec { + let mut path = self.canonical_path(ctx); + + // ASSUMPTION: (disable_name_namespacing && cxx_namespaces) diff --git a/user/zotero/llvm18.patch b/user/zotero/llvm18.patch new file mode 100644 index 0000000..2f0fd99 --- /dev/null +++ b/user/zotero/llvm18.patch @@ -0,0 +1,23 @@ +Patch-Source: https://github.com/chimera-linux/cports/blob/899c997/contrib/thunderbird/patches/llvm18.patch +--- a/dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.cpp ++++ b/dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.cpp +@@ -540,7 +540,7 @@ + + webrtc::VideoFrameType ft; + GmpFrameTypeToWebrtcFrameType(aEncodedFrame->FrameType(), &ft); +- uint32_t timestamp = (aEncodedFrame->TimeStamp() * 90ll + 999) / 1000; ++ uint64_t timestamp = (aEncodedFrame->TimeStamp() * 90ll + 999) / 1000; + + GMP_LOG_DEBUG("GMP Encoded: %" PRIu64 ", type %d, len %d", + aEncodedFrame->TimeStamp(), aEncodedFrame->BufferType(), +--- a/dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.h ++++ b/dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.h +@@ -302,7 +302,7 @@ + int64_t timestamp_us; + }; + // Map rtp time -> input image data +- DataMutex> mInputImageMap; ++ DataMutex> mInputImageMap; + + MediaEventProducer mInitPluginEvent; + MediaEventProducer mReleasePluginEvent; diff --git a/user/zotero/moz-system-jpeg.patch b/user/zotero/moz-system-jpeg.patch new file mode 100644 index 0000000..27e9eb2 --- /dev/null +++ b/user/zotero/moz-system-jpeg.patch @@ -0,0 +1,15 @@ +Patch-Source: https://phabricator.services.mozilla.com/D212612 + +diff --git a/toolkit/moz.configure b/toolkit/moz.configure +index 6d5485325c..c5dcc65dd5 100644 +--- a/toolkit/moz.configure ++++ b/toolkit/moz.configure +@@ -2426,6 +2426,8 @@ with only_when(compile_environment): + & jpeg_arm_neon_vld1q_u8_x4, + ) + ++ set_config("MOZ_SYSTEM_JPEG", True, when="--with-system-jpeg") ++ + + # PNG + # === diff --git a/user/zotero/mozilla-location.keys b/user/zotero/mozilla-location.keys new file mode 100644 index 0000000..8a3262d --- /dev/null +++ b/user/zotero/mozilla-location.keys @@ -0,0 +1 @@ +NjhhZGJjMDEtMDM3OC00Zjc0LTk0N2UtMzBiYzA5NjlhMDc3Cg== diff --git a/user/zotero/no-ccache-stats.patch b/user/zotero/no-ccache-stats.patch new file mode 100644 index 0000000..4d557a0 --- /dev/null +++ b/user/zotero/no-ccache-stats.patch @@ -0,0 +1,13 @@ +prevents a call to ccache +diff --git a/python/mozbuild/mozbuild/controller/building.py b/python/mozbuild/mozbuild/controller/building.py +index bf7009a..011c012 100644 +--- a/python/mozbuild/mozbuild/controller/building.py ++++ b/python/mozbuild/mozbuild/controller/building.py +@@ -570,6 +570,7 @@ class BuildMonitor(MozbuildObject): + ) + + def ccache_stats(self, ccache=None): ++ return None + ccache_stats = None + + if ccache is None: diff --git a/user/zotero/nrappkit-qsort.patch b/user/zotero/nrappkit-qsort.patch new file mode 100644 index 0000000..21d6d45 --- /dev/null +++ b/user/zotero/nrappkit-qsort.patch @@ -0,0 +1,34 @@ +missing include to use qsort() + +https://bugzil.la/1906955 + +--- a/dom/media/webrtc/transport/third_party/nrappkit/src/registry/registry_local.c 2024-07-09 18:11:39.207125821 +0200 ++++ b/dom/media/webrtc/transport/third_party/nrappkit/src/registry/registry_local.c 2024-07-09 18:12:07.657013364 +0200 +@@ -53,6 +53,7 @@ + #include + #endif + #include ++#include + #include "registry.h" + #include "registry_int.h" + #include "registry_vtbl.h" +@@ -62,6 +63,10 @@ + #include "r_errors.h" + #include "r_macros.h" + ++static int nr_compare_string(const void *arg1, const void *arg2) { ++ return strcasecmp(*(const char **)arg1, *(const char **)arg2); ++} ++ + /* if C were an object-oriented language, nr_scalar_registry_node and + * nr_array_registry_node would subclass nr_registry_node, but it isn't + * object-oriented language, so this is used in cases where the pointer +@@ -1067,7 +1072,7 @@ + } + + assert(sizeof(*arg.children) == sizeof(NR_registry)); +- qsort(arg.children, arg.length, sizeof(*arg.children), (void*)strcasecmp); ++ qsort(arg.children, arg.length, sizeof(*arg.children), nr_compare_string); + + *length = arg.length; + diff --git a/user/zotero/ppc-musttail.patch b/user/zotero/ppc-musttail.patch new file mode 100644 index 0000000..ebe06c0 --- /dev/null +++ b/user/zotero/ppc-musttail.patch @@ -0,0 +1,30 @@ +Patch-Source: https://github.com/chimera-linux/cports/blob/506127954653ccebf9b82df1452cce4ed0dae3b1/contrib/thunderbird/patches/ppc-musttail.patch +-- +commit 5e66655e1456c9d26637ceaed3f4533b537322c4 +Author: Daniel Kolesa +Date: Sat May 13 23:00:04 2023 +0200 + + disable musttail on ppc + + 41:38.04 LLVM ERROR: failed to perform tail call elimination on a call site marked musttail + 41:38.04 PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace. + 41:38.04 Stack dump: + 41:38.04 0. Running pass 'Function Pass Manager' on module '/builddir/thunderbird-114.0_beta1/obj-powerpc64le-unknown-linux-musl/toolkit/library/build/../../../gfx/skia/SkOpts.o'. + 41:38.04 1. Running pass 'PowerPC DAG->DAG Pattern Instruction Selection' on function '@_ZN8portableL15init_lane_masksEPNS_6ParamsEP21SkRasterPipelineStageffff' + 41:38.95 clang-16: error: unable to execute command: Aborted + + To be investigated later. + +diff --git a/gfx/skia/skia/src/core/SkRasterPipeline.h b/gfx/skia/skia/src/core/SkRasterPipeline.h +index 766bb0c..88c6cb2 100644 +--- a/gfx/skia/skia/src/core/SkRasterPipeline.h ++++ b/gfx/skia/skia/src/core/SkRasterPipeline.h +@@ -24,7 +24,7 @@ enum SkColorType : int; + struct SkImageInfo; + struct skcms_TransferFunction; + +-#if __has_cpp_attribute(clang::musttail) && !defined(__EMSCRIPTEN__) && !defined(SK_CPU_ARM32) ++#if __has_cpp_attribute(clang::musttail) && !defined(__EMSCRIPTEN__) && !defined(SK_CPU_ARM32) && !defined(__powerpc__) + #define SK_HAS_MUSTTAIL 1 + #else + #define SK_HAS_MUSTTAIL 0 diff --git a/user/zotero/ppc-webrtc.patch b/user/zotero/ppc-webrtc.patch new file mode 100644 index 0000000..bf4afdd --- /dev/null +++ b/user/zotero/ppc-webrtc.patch @@ -0,0 +1,23 @@ +Patch-Source: https://github.com/chimera-linux/cports/blob/506127954653ccebf9b82df1452cce4ed0dae3b1/contrib/thunderbird/patches/ppc64-webrtc.patch +-- +commit 010bfb0441168d51e0fffe98d1f50e0602e7947f +Author: Daniel Kolesa +Date: Sat May 13 23:40:41 2023 +0200 + + fix webrtc on ppc64 + +diff --git a/third_party/libwebrtc/moz.build b/third_party/libwebrtc/moz.build +index 976cf37..d35d447 100644 +--- a/third_party/libwebrtc/moz.build ++++ b/third_party/libwebrtc/moz.build +@@ -643,3 +643,10 @@ if CONFIG["CPU_ARCH"] == "x86_64" and CONFIG["OS_TARGET"] == "WINNT": + "/third_party/libwebrtc/modules/audio_processing/agc2/rnn_vad/vector_math_avx2_gn", + "/third_party/libwebrtc/modules/desktop_capture/desktop_capture_differ_sse2_gn" + ] ++ ++if CONFIG["CPU_ARCH"] == "ppc64" and CONFIG["OS_TARGET"] == "Linux": ++ ++ DIRS += [ ++ "/third_party/libwebrtc/modules/desktop_capture/desktop_capture_gn", ++ "/third_party/libwebrtc/modules/desktop_capture/primitives_gn" ++ ] diff --git a/user/zotero/python-deps.patch b/user/zotero/python-deps.patch new file mode 100644 index 0000000..dfdd3b2 --- /dev/null +++ b/user/zotero/python-deps.patch @@ -0,0 +1,12 @@ +diff --git a/python/sites/mach.txt b/python/sites/mach.txt +index 55cc6fb..51bf67d 100644 +--- a/python/sites/mach.txt ++++ b/python/sites/mach.txt +@@ -141,5 +141,5 @@ pypi-optional:glean-sdk==52.7.0:telemetry will not be collected + # Mach gracefully handles the case where `psutil` is unavailable. + # We aren't (yet) able to pin packages in automation, so we have to + # support down to the oldest locally-installed version (5.4.2). +-pypi-optional:psutil>=5.4.2,<=5.9.4:telemetry will be missing some data +-pypi-optional:zstandard>=0.11.1,<=0.22.0:zstd archives will not be possible to extract ++pypi-optional:psutil>=5.4.2,<=5.10.0:telemetry will be missing some data ++pypi-optional:zstandard>=0.11.1,<=0.24.0:zstd archives will not be possible to extract diff --git a/user/zotero/rust-lto-thin.patch b/user/zotero/rust-lto-thin.patch new file mode 100644 index 0000000..788fcea --- /dev/null +++ b/user/zotero/rust-lto-thin.patch @@ -0,0 +1,12 @@ +set rust crate lto to thin to not use fatlto for gkrust which fails sometimes +--- a/config/makefiles/rust.mk ++++ b/config/makefiles/rust.mk +@@ -92,7 +92,7 @@ + # Never enable when coverage is enabled to work around https://github.com/rust-lang/rust/issues/90045. + ifndef MOZ_CODE_COVERAGE + ifeq (,$(findstring gkrust_gtest,$(RUST_LIBRARY_FILE))) +-cargo_rustc_flags += -Clto$(if $(filter full,$(MOZ_LTO_RUST_CROSS)),=fat) ++cargo_rustc_flags += -Clto=thin + endif + # We need -Cembed-bitcode=yes for all crates when using -Clto. + RUSTFLAGS += -Cembed-bitcode=yes diff --git a/user/zotero/rust1.78-packed-to-portable_simd.patch b/user/zotero/rust1.78-packed-to-portable_simd.patch new file mode 100644 index 0000000..e03f577 --- /dev/null +++ b/user/zotero/rust1.78-packed-to-portable_simd.patch @@ -0,0 +1,3582 @@ +Adapted from https://hg.mozilla.org/mozilla-central/rev/1db2ef126a6a +-- + +# HG changeset patch +# User Henri Sivonen +# Date 1714462184 0 +# Node ID 1db2ef126a6a8555dbf50345e16492c977b42e92 +# Parent a545e84b3674c4878f2e618b7bce23058f2ac690 +Bug 1882209 - Update encoding_rs to 0.8.34 to deal with rustc changes. r=glandium,supply-chain-reviewers + +Differential Revision: https://phabricator.services.mozilla.com/D207167 + +diff --git a/.cargo/config.in b/.cargo/config.in +--- a/.cargo/config.in ++++ b/.cargo/config.in +@@ -35,31 +35,31 @@ git = "https://github.com/gfx-rs/wgpu" + rev = "f71a1bc736fde37509262ca03e91d8f56a13aeb5" + replace-with = "vendored-sources" + + [source."git+https://github.com/glandium/warp?rev=4af45fae95bc98b0eba1ef0db17e1dac471bb23d"] + git = "https://github.com/glandium/warp" + rev = "4af45fae95bc98b0eba1ef0db17e1dac471bb23d" + replace-with = "vendored-sources" + ++[source."git+https://github.com/hsivonen/any_all_workaround?rev=7fb1b7034c9f172aade21ee1c8554e8d8a48af80"] ++git = "https://github.com/hsivonen/any_all_workaround" ++rev = "7fb1b7034c9f172aade21ee1c8554e8d8a48af80" ++replace-with = "vendored-sources" ++ + [source."git+https://github.com/hsivonen/chardetng?rev=3484d3e3ebdc8931493aa5df4d7ee9360a90e76b"] + git = "https://github.com/hsivonen/chardetng" + rev = "3484d3e3ebdc8931493aa5df4d7ee9360a90e76b" + replace-with = "vendored-sources" + + [source."git+https://github.com/hsivonen/chardetng_c?rev=ed8a4c6f900a90d4dbc1d64b856e61490a1c3570"] + git = "https://github.com/hsivonen/chardetng_c" + rev = "ed8a4c6f900a90d4dbc1d64b856e61490a1c3570" + replace-with = "vendored-sources" + +-[source."git+https://github.com/hsivonen/packed_simd?rev=e588ceb568878e1a3156ea9ce551d5b63ef0cdc4"] +-git = "https://github.com/hsivonen/packed_simd" +-rev = "e588ceb568878e1a3156ea9ce551d5b63ef0cdc4" +-replace-with = "vendored-sources" +- + [source."git+https://github.com/jfkthame/mapped_hyph.git?rev=c7651a0cffff41996ad13c44f689bd9cd2192c01"] + git = "https://github.com/jfkthame/mapped_hyph.git" + rev = "c7651a0cffff41996ad13c44f689bd9cd2192c01" + replace-with = "vendored-sources" + + [source."git+https://github.com/mozilla-spidermonkey/jsparagus?rev=64ba08e24749616de2344112f226d1ef4ba893ae"] + git = "https://github.com/mozilla-spidermonkey/jsparagus" + rev = "64ba08e24749616de2344112f226d1ef4ba893ae" +diff --git a/Cargo.lock b/Cargo.lock +--- a/Cargo.lock ++++ b/Cargo.lock +@@ -80,16 +80,25 @@ dependencies = [ + name = "android_system_properties" + version = "0.1.5" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" + dependencies = [ + "libc", + ] + ++[[package]] ++name = "any_all_workaround" ++version = "0.1.0" ++source = "git+https://github.com/hsivonen/any_all_workaround?rev=7fb1b7034c9f172aade21ee1c8554e8d8a48af80#7fb1b7034c9f172aade21ee1c8554e8d8a48af80" ++dependencies = [ ++ "cfg-if 1.0.0", ++ "version_check", ++] ++ + [[package]] + name = "anyhow" + version = "1.0.69" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" + + [[package]] + name = "app_services_logger" +@@ -1431,22 +1440,22 @@ dependencies = [ + "encoding_rs", + "nserror", + "nsstring", + "xmldecl", + ] + + [[package]] + name = "encoding_rs" +-version = "0.8.33" ++version = "0.8.34" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" ++checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" + dependencies = [ ++ "any_all_workaround", + "cfg-if 1.0.0", +- "packed_simd", + ] + + [[package]] + name = "enum-primitive-derive" + version = "0.2.2" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "c375b9c5eadb68d0a6efee2999fef292f45854c3444c86f09d8ab086ba942b0e" + dependencies = [ +@@ -3901,25 +3910,16 @@ checksum = "8d91edf4fbb970279443471345a4e8c491bf05bb283b3e6c88e4e606fd8c181b" + [[package]] + name = "oxilangtag-ffi" + version = "0.1.0" + dependencies = [ + "nsstring", + "oxilangtag", + ] + +-[[package]] +-name = "packed_simd" +-version = "0.3.9" +-source = "git+https://github.com/hsivonen/packed_simd?rev=e588ceb568878e1a3156ea9ce551d5b63ef0cdc4#e588ceb568878e1a3156ea9ce551d5b63ef0cdc4" +-dependencies = [ +- "cfg-if 1.0.0", +- "num-traits", +-] +- + [[package]] + name = "parking_lot" + version = "0.11.2" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" + dependencies = [ + "instant", + "lock_api", +diff --git a/Cargo.toml b/Cargo.toml +--- a/Cargo.toml ++++ b/Cargo.toml +@@ -154,22 +154,22 @@ rure = { path = "third_party/rust/rure" } + + # 0.31.1 but without rust-cssparser#342. + # TODO: Remove these, and just use v0.31.1 once bug 1836219 lands + # (which will get syn 2 into the tree). + cssparser = { path = "third_party/rust/cssparser" } + cssparser-macros = { path = "third_party/rust/cssparser-macros" } + + # Other overrides ++any_all_workaround = { git = "https://github.com/hsivonen/any_all_workaround", rev = "7fb1b7034c9f172aade21ee1c8554e8d8a48af80" } + chardetng = { git = "https://github.com/hsivonen/chardetng", rev="3484d3e3ebdc8931493aa5df4d7ee9360a90e76b" } + chardetng_c = { git = "https://github.com/hsivonen/chardetng_c", rev="ed8a4c6f900a90d4dbc1d64b856e61490a1c3570" } + coremidi = { git = "https://github.com/chris-zen/coremidi.git", rev="fc68464b5445caf111e41f643a2e69ccce0b4f83" } + firefox-on-glean = { path = "toolkit/components/glean/api" } + libudev-sys = { path = "dom/webauthn/libudev-sys" } +-packed_simd = { git = "https://github.com/hsivonen/packed_simd", rev = "e588ceb568878e1a3156ea9ce551d5b63ef0cdc4" } + midir = { git = "https://github.com/mozilla/midir.git", rev = "519e651241e867af3391db08f9ae6400bc023e18" } + # warp 0.3.3 + https://github.com/seanmonstar/warp/pull/1007 + warp = { git = "https://github.com/glandium/warp", rev = "4af45fae95bc98b0eba1ef0db17e1dac471bb23d" } + + # application-services overrides to make updating them all simpler. + interrupt-support = { git = "https://github.com/mozilla/application-services", rev = "86c84c217036c12283d19368867323a66bf35883" } + sql-support = { git = "https://github.com/mozilla/application-services", rev = "86c84c217036c12283d19368867323a66bf35883" } + sync15 = { git = "https://github.com/mozilla/application-services", rev = "86c84c217036c12283d19368867323a66bf35883" } +diff --git a/config/makefiles/rust.mk b/config/makefiles/rust.mk +--- a/config/makefiles/rust.mk ++++ b/config/makefiles/rust.mk +@@ -260,17 +260,17 @@ export COREAUDIO_SDK_PATH=$(IPHONEOS_SDK + export IPHONEOS_SDK_DIR + PATH := $(topsrcdir)/build/macosx:$(PATH) + endif + endif + + ifndef RUSTC_BOOTSTRAP + RUSTC_BOOTSTRAP := mozglue_static,qcms + ifdef MOZ_RUST_SIMD +-RUSTC_BOOTSTRAP := $(RUSTC_BOOTSTRAP),encoding_rs,packed_simd ++RUSTC_BOOTSTRAP := $(RUSTC_BOOTSTRAP),encoding_rs,any_all_workaround + endif + export RUSTC_BOOTSTRAP + endif + + target_rust_ltoable := force-cargo-library-build $(ADD_RUST_LTOABLE) + target_rust_nonltoable := force-cargo-test-run force-cargo-program-build + + ifdef MOZ_PGO_RUST +diff --git a/supply-chain/audits.toml b/supply-chain/audits.toml +--- a/supply-chain/audits.toml ++++ b/supply-chain/audits.toml +@@ -596,16 +596,29 @@ who = "Mike Hommey "] ++description = "Workaround for bad LLVM codegen for boolean reductions on 32-bit ARM" ++homepage = "https://docs.rs/any_all_workaround/" ++documentation = "https://docs.rs/any_all_workaround/" ++readme = "README.md" ++license = "MIT OR Apache-2.0" ++repository = "https://github.com/hsivonen/any_all_workaround" ++ ++[dependencies] ++cfg-if = "1.0" ++ ++[build-dependencies] ++version_check = "0.9" +diff --git a/third_party/rust/packed_simd/LICENSE-APACHE b/third_party/rust/any_all_workaround/LICENSE-APACHE +rename from third_party/rust/packed_simd/LICENSE-APACHE +rename to third_party/rust/any_all_workaround/LICENSE-APACHE +diff --git a/third_party/rust/packed_simd/LICENSE-MIT b/third_party/rust/any_all_workaround/LICENSE-MIT +rename from third_party/rust/packed_simd/LICENSE-MIT +rename to third_party/rust/any_all_workaround/LICENSE-MIT +diff --git a/third_party/rust/any_all_workaround/LICENSE-MIT-QCMS b/third_party/rust/any_all_workaround/LICENSE-MIT-QCMS +new file mode 100644 +--- /dev/null ++++ b/third_party/rust/any_all_workaround/LICENSE-MIT-QCMS +@@ -0,0 +1,21 @@ ++qcms ++Copyright (C) 2009-2024 Mozilla Corporation ++Copyright (C) 1998-2007 Marti Maria ++ ++Permission is hereby granted, free of charge, to any person obtaining ++a copy of this software and associated documentation files (the "Software"), ++to deal in the Software without restriction, including without limitation ++the rights to use, copy, modify, merge, publish, distribute, sublicense, ++and/or sell copies of the Software, and to permit persons to whom the Software ++is furnished to do so, subject to the following conditions: ++ ++The above copyright notice and this permission notice shall be included in ++all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ++THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE ++LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION ++OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION ++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +diff --git a/third_party/rust/any_all_workaround/README.md b/third_party/rust/any_all_workaround/README.md +new file mode 100644 +--- /dev/null ++++ b/third_party/rust/any_all_workaround/README.md +@@ -0,0 +1,13 @@ ++# any_all_workaround ++ ++This is a workaround for bad codegen ([Rust bug](https://github.com/rust-lang/portable-simd/issues/146), [LLVM bug](https://github.com/llvm/llvm-project/issues/50466)) for the `any()` and `all()` reductions for NEON-backed SIMD vectors on 32-bit ARM. On other platforms these delegate to `any()` and `all()` in `core::simd`. ++ ++The plan is to abandon this crate once the LLVM bug is fixed or `core::simd` works around the LLVM bug. ++ ++The code is forked from the [`packed_simd` crate](https://raw.githubusercontent.com/hsivonen/packed_simd/d938e39bee9bc5c222f5f2f2a0df9e53b5ce36ae/src/codegen/reductions/mask/arm.rs). ++ ++This crate requires Nightly Rust as it depends on the `portable_simd` feature. ++ ++# License ++ ++`MIT OR Apache-2.0`, since that's how `packed_simd` is licensed. (The ARM intrinsics Rust version workaround is from qcms, see LICENSE-MIT-QCMS.) +diff --git a/third_party/rust/any_all_workaround/build.rs b/third_party/rust/any_all_workaround/build.rs +new file mode 100644 +--- /dev/null ++++ b/third_party/rust/any_all_workaround/build.rs +@@ -0,0 +1,7 @@ ++extern crate version_check as rustc; ++ ++fn main() { ++ if rustc::is_min_version("1.78.0").unwrap_or(false) { ++ println!("cargo:rustc-cfg=stdsimd_split"); ++ } ++} +diff --git a/third_party/rust/any_all_workaround/src/lib.rs b/third_party/rust/any_all_workaround/src/lib.rs +new file mode 100644 +--- /dev/null ++++ b/third_party/rust/any_all_workaround/src/lib.rs +@@ -0,0 +1,110 @@ ++// This code began as a fork of ++// https://raw.githubusercontent.com/rust-lang/packed_simd/d938e39bee9bc5c222f5f2f2a0df9e53b5ce36ae/src/codegen/reductions/mask/arm.rs ++// which didn't have a license header on the file, but Cargo.toml said "MIT OR Apache-2.0". ++// See LICENSE-MIT and LICENSE-APACHE. ++ ++#![no_std] ++#![feature(portable_simd)] ++#![cfg_attr( ++ all( ++ stdsimd_split, ++ target_arch = "arm", ++ target_endian = "little", ++ target_feature = "neon", ++ target_feature = "v7" ++ ), ++ feature(stdarch_arm_neon_intrinsics) ++)] ++#![cfg_attr( ++ all( ++ not(stdsimd_split), ++ target_arch = "arm", ++ target_endian = "little", ++ target_feature = "neon", ++ target_feature = "v7" ++ ), ++ feature(stdsimd) ++)] ++ ++use cfg_if::cfg_if; ++use core::simd::mask16x8; ++use core::simd::mask32x4; ++use core::simd::mask8x16; ++ ++cfg_if! { ++ if #[cfg(all(target_arch = "arm", target_endian = "little", target_feature = "neon", target_feature = "v7"))] { ++ use core::simd::mask8x8; ++ use core::simd::mask16x4; ++ use core::simd::mask32x2; ++ macro_rules! arm_128_v7_neon_impl { ++ ($all:ident, $any:ident, $id:ident, $half:ident, $vpmin:ident, $vpmax:ident) => { ++ #[inline] ++ pub fn $all(s: $id) -> bool { ++ use core::arch::arm::$vpmin; ++ use core::mem::transmute; ++ unsafe { ++ union U { ++ halves: ($half, $half), ++ vec: $id, ++ } ++ let halves = U { vec: s }.halves; ++ let h: $half = transmute($vpmin(transmute(halves.0), transmute(halves.1))); ++ h.all() ++ } ++ } ++ #[inline] ++ pub fn $any(s: $id) -> bool { ++ use core::arch::arm::$vpmax; ++ use core::mem::transmute; ++ unsafe { ++ union U { ++ halves: ($half, $half), ++ vec: $id, ++ } ++ let halves = U { vec: s }.halves; ++ let h: $half = transmute($vpmax(transmute(halves.0), transmute(halves.1))); ++ h.any() ++ } ++ } ++ } ++ } ++ } else { ++ macro_rules! arm_128_v7_neon_impl { ++ ($all:ident, $any:ident, $id:ident, $half:ident, $vpmin:ident, $vpmax:ident) => { ++ #[inline(always)] ++ pub fn $all(s: $id) -> bool { ++ s.all() ++ } ++ #[inline(always)] ++ pub fn $any(s: $id) -> bool { ++ s.any() ++ } ++ } ++ } ++ } ++} ++ ++arm_128_v7_neon_impl!( ++ all_mask8x16, ++ any_mask8x16, ++ mask8x16, ++ mask8x8, ++ vpmin_u8, ++ vpmax_u8 ++); ++arm_128_v7_neon_impl!( ++ all_mask16x8, ++ any_mask16x8, ++ mask16x8, ++ mask16x4, ++ vpmin_u16, ++ vpmax_u16 ++); ++arm_128_v7_neon_impl!( ++ all_mask32x4, ++ any_mask32x4, ++ mask32x4, ++ mask32x2, ++ vpmin_u32, ++ vpmax_u32 ++); +diff --git a/third_party/rust/encoding_rs/.cargo-checksum.json b/third_party/rust/encoding_rs/.cargo-checksum.json +--- a/third_party/rust/encoding_rs/.cargo-checksum.json ++++ b/third_party/rust/encoding_rs/.cargo-checksum.json +@@ -1,1 +1,1 @@ +-{"files":{"CONTRIBUTING.md":"ca1901f3e8532fb4cec894fd3664f0eaa898c0c4b961d1b992d1ed54eacf362a","COPYRIGHT":"11789f45bb180841cd362a5eee6789c68ddb573a11105e30768c308a6add0190","Cargo.toml":"42fa83322aa9fd6723b77d35d0cacb92cbb6e7f573ce11c55f5225292866f8f4","Ideas.md":"b7452893f500163868d8de52c09addaf91e1632454ed02e892c467ed7ec39dbd","LICENSE-APACHE":"cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30","LICENSE-MIT":"3fa4ca83dcc9237839b1bdeb2e6d16bdfb5ec0c5ce42b24694d8bbf0dcbef72c","LICENSE-WHATWG":"838118388fe5c2e7f1dbbaeed13e1c7f3ebf88be91319c7c1d77c18e987d1a50","README.md":"d938e8ab0b9ab67e74a1a4f48f23fdce956d0ad3a3f6147ae7612a92763c88d5","ci/miri.sh":"43cb8d82f49e3bfe2d2274b6ccd6f0714a4188ccef0cecc040829883cfdbee25","doc/Big5.txt":"f73a2edc5cb6c2d140ba6e07f4542e1c4a234950378acde1df93480f0ca0be0b","doc/EUC-JP.txt":"ee2818b907d0137f40a9ab9fd525fc700a44dbdddb6cf0c157a656566bae4bf1","doc/EUC-KR.txt":"71d9e2ccf3b124e8bdfb433c8cf2773fd878077038d0cec3c7237a50f4a78a30","doc/GBK.txt":"c1b522b5a799884e5001da661f42c5a8f4d0acb9ef1d74b206f22b5f65365606","doc/IBM866.txt":"a5a433e804d0f83af785015179fbc1d9b0eaf1f7960efcd04093e136b51fbd0e","doc/ISO-2022-JP.txt":"af86684f5a8f0e2868d7b2c292860140c3d2e5527530ca091f1b28198e8e2fe6","doc/ISO-8859-10.txt":"6d3949ad7c81ca176895101ed81a1db7df1060d64e262880b94bd31bb344ab4d","doc/ISO-8859-13.txt":"3951dd89cf93f7729148091683cf8511f4529388b7dc8dcd0d62eaed55be93fa","doc/ISO-8859-14.txt":"3d330784a0374fd255a38b47949675cc7168c800530534b0a01cac6edc623adc","doc/ISO-8859-15.txt":"24b1084aab5127a85aab99153f86e24694d0a3615f53b5ce23683f97cf66c47a","doc/ISO-8859-16.txt":"ce0272559b92ba76d7a7e476f6424ae4a5cc72e75b183611b08392e44add4d25","doc/ISO-8859-2.txt":"18ceff88c13d1b5ba455a3919b1e3de489045c4c3d2dd7e8527c125c75d54aad","doc/ISO-8859-3.txt":"21798404c68f4f5db59223362f24999da96968c0628427321fccce7d2849a130","doc/ISO-8859-4.txt":"d27f6520c6c5bfbcc19176b71d081cdb3bccde1622bb3e420d5680e812632d53","doc/ISO-8859-5.txt":"a10ec8d6ea7a78ad15da7275f6cb1a3365118527e28f9af6d0d5830501303f3a","doc/ISO-8859-6.txt":"ccda8a2efc96115336bdd77776637b9712425e44fbcf745353b9057fbef144e7","doc/ISO-8859-7.txt":"17900fa1f27a445958f0a77d7d9056be375a6bd7ee4492aa680c7c1500bab85e","doc/ISO-8859-8-I.txt":"8357555646d54265a9b9ffa3e68b08d132312f1561c60108ff9b8b1167b6ecf2","doc/ISO-8859-8.txt":"72cd6f3afb7b4a9c16a66a362473315770b7755d72c86c870e52fc3eba86c8af","doc/KOI8-R.txt":"839cf19a38da994488004ed7814b1f6151640156a9a2af02bf2efca745fb5966","doc/KOI8-U.txt":"0cc76624ed1f024183e2298b7e019957da2c70c8ca06e0fc4e6f353f50a5054f","doc/Shift_JIS.txt":"34c49141818cb9ddbcf59cc858f78a79be8ad148d563f26415108ae1f148443f","doc/UTF-16BE.txt":"e2e280d8acbaa6d2a6b3569d60e17500a285f2baa0df3363dd85537cd5a1ef8f","doc/UTF-16LE.txt":"70bdc170e3fc5298ba68f10125fb5eeb8b077036cc96bb4416c4de396f6d76c1","doc/UTF-8.txt":"ea7bae742e613010ced002cf4b601a737d2203fad65e115611451bc4428f548a","doc/gb18030.txt":"dc71378a8f07a2d8659f69ee81fb8791fef56ba86f124b429978285237bb4a7b","doc/macintosh.txt":"57491e53866711b4672d9b9ff35380b9dac9e0d8e3d6c20bdd6140603687c023","doc/replacement.txt":"4b6c3bbd7999d9d4108a281594bd02d13607e334a95465afff8c2c08d395f0e4","doc/windows-1250.txt":"61296bb6a21cdab602300d32ecfba434cb82de5ac3bc88d58710d2f125e28d39","doc/windows-1251.txt":"7deea1c61dea1485c8ff02db2c7d578db7a9aab63ab1cfd02ec04b515864689e","doc/windows-1252.txt":"933ef3bdddfce5ee132b9f1a1aa8b47423d2587bbe475b19028d0a6d38e180b6","doc/windows-1253.txt":"1a38748b88e99071a5c7b3d5456ead4caedeabab50d50d658be105bc113714de","doc/windows-1254.txt":"f8372f86c6f8d642563cd6ddc025260553292a39423df1683a98670bd7bf2b47","doc/windows-1255.txt":"4e5852494730054e2da258a74e1b9d780abbcdd8ce22ebc218ca2efe9e90493d","doc/windows-1256.txt":"c0879c5172abedead302a406e8f60d9cd9598694a0ffa4fd288ffe4fef7b8ea1","doc/windows-1257.txt":"c28a0c9f964fcb2b46d21f537c402446501a2800670481d6abf9fd9e9018d523","doc/windows-1258.txt":"5019ae4d61805c79aacbf17c93793342dbb098d65a1837783bc3e2c6d6a23602","doc/windows-874.txt":"4ef0e4501c5feba8b17aee1818602ed44b36ca8475db771ce2fc16d392cabecc","doc/x-mac-cyrillic.txt":"58be154d8a888ca3d484b83b44f749823ef339ab27f14d90ca9a856f5050a8bd","doc/x-user-defined.txt":"f9cd07c4321bf5cfb0be4bdddd251072999b04a6cf7a6f5bc63709a84e2c1ffc","generate-encoding-data.py":"be989dd25c6b946e3e8745fdc8e8a80fcf24b3be99ad0b4b78153ba3f6ab6310","rustfmt.toml":"85c1a3b4382fd89e991cbb81b70fb52780472edc064c963943cdaaa56e0a2030","src/ascii.rs":"c44c002641adb5ebc4368707a8cc0a076d2f33e6a5c27b1b69988eb515f5653d","src/big5.rs":"ec6e2913011a38e9a3e825a1731f139a7ca1d5b264fefae51a3cc1a68a57cef9","src/data.rs":"8a617cc57032092d65850eb27e00de687c80aea3299e839a1f58b42d0b35abf3","src/euc_jp.rs":"32047f5b540188c4cb19c07165f846b9786a09f18e315ed3e9bda1293dae52aa","src/euc_kr.rs":"9b25afc72d9378700eecfac58d55ad1c5946d6cd0ccde2c29c08200ef2de6bb9","src/gb18030.rs":"808587168d73f0c80f8520f0ca9b161866ed2efeb17a05e85fdf3b8efe7ba28a","src/handles.rs":"cc83dc0754751d67f5688a65c5e0191cba02f6bacce81a0813a243cba55eef7a","src/iso_2022_jp.rs":"9bb485e82574f4b7d4b2364f0ff276acb6a0bc111758420a3b0ec5e04c196652","src/lib.rs":"1dc07b818e45846b16ddcaf0de46c8862dd7df8099123ec38b95c3f8ad9c91ec","src/macros.rs":"200997f8870de8bfd8cdc475e92115df42108c0df661e49d3d1cbc32056e1d99","src/mem.rs":"0bf34103e0ad1b842a13a082dee2b920b05cf4fb0f145c9ee7f608f4cb4a544f","src/replacement.rs":"7660b34a53f8c1ca2bdfa0e51e843ec28326950952ad8bc96569feb93ac62308","src/shift_jis.rs":"6951ae67e36b1a12fa3a30734957f444d8b1b4ae0e2bde52060b29bd0f16d9d9","src/simd_funcs.rs":"2612aba86e1d201096d7e47a859bc3444f85934cc82d8adc6d39a4304d9eecfc","src/single_byte.rs":"3c9e9c1f946ae622c725ba9421240c1faa9a05e95fa10dd4642a25cb276a1edc","src/test_data/big5_in.txt":"4c5a8691f8dc717311889c63894026d2fb62725a86c4208ca274a9cc8d42a503","src/test_data/big5_in_ref.txt":"99d399e17750cf9c7cf30bb253dbfe35b81c4fcbdead93cfa48b1429213473c7","src/test_data/big5_out.txt":"6193ca97c297aa20e09396038d18e938bb7ea331c26f0f2454097296723a0b13","src/test_data/big5_out_ref.txt":"36567691f557df144f6cc520015a87038dfa156f296fcf103b56ae9a718be1fc","src/test_data/euc_kr_in.txt":"c86a7224f3215fa0d04e685622a752fdc72763e8ae076230c7fd62de57ec4074","src/test_data/euc_kr_in_ref.txt":"1f419f4ca47d708b54c73c461545a022ae2e20498fdbf8005a483d752a204883","src/test_data/euc_kr_out.txt":"e7f32e026f70be1e1b58e0047baf7d3d2c520269c4f9b9992e158b4decb0a1a3","src/test_data/euc_kr_out_ref.txt":"c9907857980b20b8e9e3b584482ed6567a2be6185d72237b6322f0404944924e","src/test_data/gb18030_in.txt":"ab7231b2d3e9afacdbd7d7f3b9e5361a7ff9f7e1cfdb4f3bd905b9362b309e53","src/test_data/gb18030_in_ref.txt":"dc5069421adca2043c55f5012b55a76fdff651d22e6e699fd0978f8d5706815c","src/test_data/gb18030_out.txt":"f0208d527f5ca63de7d9a0323be8d5cf12d8a104b2943d92c2701f0c3364dac1","src/test_data/gb18030_out_ref.txt":"6819fe47627e4ea01027003fc514b9f21a1322e732d7f1fb92cc6c5455bc6c07","src/test_data/iso_2022_jp_in.txt":"cd24bbdcb1834e25db54646fbf4c41560a13dc7540f6be3dba4f5d97d44513af","src/test_data/iso_2022_jp_in_ref.txt":"3dc4e6a5e06471942d086b16c9440945e78415f6f3f47e43717e4bc2eac2cdf5","src/test_data/iso_2022_jp_out.txt":"9b6f015329dda6c3f9ee5ce6dbd6fa9c89acc21283e886836c78b8d833480c21","src/test_data/iso_2022_jp_out_ref.txt":"78cb260093a20116ad9a42f43b05d1848c5ab100b6b9a850749809e943884b35","src/test_data/jis0208_in.txt":"6df3030553ffb0a6615bb33dc8ea9dca6d9623a9028e2ffec754ce3c3da824cc","src/test_data/jis0208_in_ref.txt":"3dc4e6a5e06471942d086b16c9440945e78415f6f3f47e43717e4bc2eac2cdf5","src/test_data/jis0208_out.txt":"4ec24477e1675ce750733bdc3c5add1cd27b6bd4ce1f09289564646e9654e857","src/test_data/jis0208_out_ref.txt":"c3e1cef5032b2b1d93a406f31ff940c4e2dfe8859b8b17ca2761fee7a75a0e48","src/test_data/jis0212_in.txt":"c011f0dd72bd7c8cd922df9374ef8d2769a77190514c77f6c62b415852eeb9fe","src/test_data/jis0212_in_ref.txt":"7d9458b3d2f73e7092a7f505c08ce1d233dde18aa679fbcf9889256239cc9e06","src/test_data/shift_jis_in.txt":"02e389ccef0dd2122e63f503899402cb7f797912c2444cc80ab93131116c5524","src/test_data/shift_jis_in_ref.txt":"512f985950ca902e643c88682dba9708b7c38d3c5ec2925168ab00ac94ab19f9","src/test_data/shift_jis_out.txt":"5fbc44da7bf639bf6cfe0fa1fd3eba7102b88f81919c9ea991302712f69426fb","src/test_data/shift_jis_out_ref.txt":"466322c6fed8286c64582731755290c2296508efdd258826e6279686649b481f","src/test_labels_names.rs":"23a2e11b02b3b8d15fb5613a625e3edb2c61e70e3c581abfd638719a4088200d","src/testing.rs":"f59e671e95a98a56f6b573e8c6be4d71e670bf52f7e20eb1605d990aafa1894e","src/utf_16.rs":"c071a147fad38d750c2c247e141b76b929a48007b99f26b2922b9caecdaf2f25","src/utf_8.rs":"7b7d887b347f1aefa03246b028a36a72758a4ce76c28f3b45c19467851aa7839","src/variant.rs":"1fab5363588a1554a7169de8731ea9cded7ac63ea35caabdd1c27a8dde68c27b","src/x_user_defined.rs":"c9c010730dfb9f141d4fed19350c08a21af240913a54bb64f5ca89ff93b6b7d1"},"package":"7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"} +\ No newline at end of file ++{"files":{"CONTRIBUTING.md":"ca1901f3e8532fb4cec894fd3664f0eaa898c0c4b961d1b992d1ed54eacf362a","COPYRIGHT":"11789f45bb180841cd362a5eee6789c68ddb573a11105e30768c308a6add0190","Cargo.toml":"22a4d210c92dae9f32c6944ef340ee8fdd027f99c081577e8907123e2a93383e","Ideas.md":"b7452893f500163868d8de52c09addaf91e1632454ed02e892c467ed7ec39dbd","LICENSE-APACHE":"cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30","LICENSE-MIT":"3fa4ca83dcc9237839b1bdeb2e6d16bdfb5ec0c5ce42b24694d8bbf0dcbef72c","LICENSE-WHATWG":"838118388fe5c2e7f1dbbaeed13e1c7f3ebf88be91319c7c1d77c18e987d1a50","README.md":"1d08aefcb92afa81b18154049c9abbcad4540a23f7172e9f9bbed5af33f1a087","ci/miri.sh":"43cb8d82f49e3bfe2d2274b6ccd6f0714a4188ccef0cecc040829883cfdbee25","doc/Big5.txt":"f73a2edc5cb6c2d140ba6e07f4542e1c4a234950378acde1df93480f0ca0be0b","doc/EUC-JP.txt":"ee2818b907d0137f40a9ab9fd525fc700a44dbdddb6cf0c157a656566bae4bf1","doc/EUC-KR.txt":"71d9e2ccf3b124e8bdfb433c8cf2773fd878077038d0cec3c7237a50f4a78a30","doc/GBK.txt":"c1b522b5a799884e5001da661f42c5a8f4d0acb9ef1d74b206f22b5f65365606","doc/IBM866.txt":"a5a433e804d0f83af785015179fbc1d9b0eaf1f7960efcd04093e136b51fbd0e","doc/ISO-2022-JP.txt":"af86684f5a8f0e2868d7b2c292860140c3d2e5527530ca091f1b28198e8e2fe6","doc/ISO-8859-10.txt":"6d3949ad7c81ca176895101ed81a1db7df1060d64e262880b94bd31bb344ab4d","doc/ISO-8859-13.txt":"3951dd89cf93f7729148091683cf8511f4529388b7dc8dcd0d62eaed55be93fa","doc/ISO-8859-14.txt":"3d330784a0374fd255a38b47949675cc7168c800530534b0a01cac6edc623adc","doc/ISO-8859-15.txt":"24b1084aab5127a85aab99153f86e24694d0a3615f53b5ce23683f97cf66c47a","doc/ISO-8859-16.txt":"ce0272559b92ba76d7a7e476f6424ae4a5cc72e75b183611b08392e44add4d25","doc/ISO-8859-2.txt":"18ceff88c13d1b5ba455a3919b1e3de489045c4c3d2dd7e8527c125c75d54aad","doc/ISO-8859-3.txt":"21798404c68f4f5db59223362f24999da96968c0628427321fccce7d2849a130","doc/ISO-8859-4.txt":"d27f6520c6c5bfbcc19176b71d081cdb3bccde1622bb3e420d5680e812632d53","doc/ISO-8859-5.txt":"a10ec8d6ea7a78ad15da7275f6cb1a3365118527e28f9af6d0d5830501303f3a","doc/ISO-8859-6.txt":"ccda8a2efc96115336bdd77776637b9712425e44fbcf745353b9057fbef144e7","doc/ISO-8859-7.txt":"17900fa1f27a445958f0a77d7d9056be375a6bd7ee4492aa680c7c1500bab85e","doc/ISO-8859-8-I.txt":"8357555646d54265a9b9ffa3e68b08d132312f1561c60108ff9b8b1167b6ecf2","doc/ISO-8859-8.txt":"72cd6f3afb7b4a9c16a66a362473315770b7755d72c86c870e52fc3eba86c8af","doc/KOI8-R.txt":"839cf19a38da994488004ed7814b1f6151640156a9a2af02bf2efca745fb5966","doc/KOI8-U.txt":"0cc76624ed1f024183e2298b7e019957da2c70c8ca06e0fc4e6f353f50a5054f","doc/Shift_JIS.txt":"34c49141818cb9ddbcf59cc858f78a79be8ad148d563f26415108ae1f148443f","doc/UTF-16BE.txt":"e2e280d8acbaa6d2a6b3569d60e17500a285f2baa0df3363dd85537cd5a1ef8f","doc/UTF-16LE.txt":"70bdc170e3fc5298ba68f10125fb5eeb8b077036cc96bb4416c4de396f6d76c1","doc/UTF-8.txt":"ea7bae742e613010ced002cf4b601a737d2203fad65e115611451bc4428f548a","doc/gb18030.txt":"dc71378a8f07a2d8659f69ee81fb8791fef56ba86f124b429978285237bb4a7b","doc/macintosh.txt":"57491e53866711b4672d9b9ff35380b9dac9e0d8e3d6c20bdd6140603687c023","doc/replacement.txt":"4b6c3bbd7999d9d4108a281594bd02d13607e334a95465afff8c2c08d395f0e4","doc/windows-1250.txt":"61296bb6a21cdab602300d32ecfba434cb82de5ac3bc88d58710d2f125e28d39","doc/windows-1251.txt":"7deea1c61dea1485c8ff02db2c7d578db7a9aab63ab1cfd02ec04b515864689e","doc/windows-1252.txt":"933ef3bdddfce5ee132b9f1a1aa8b47423d2587bbe475b19028d0a6d38e180b6","doc/windows-1253.txt":"1a38748b88e99071a5c7b3d5456ead4caedeabab50d50d658be105bc113714de","doc/windows-1254.txt":"f8372f86c6f8d642563cd6ddc025260553292a39423df1683a98670bd7bf2b47","doc/windows-1255.txt":"4e5852494730054e2da258a74e1b9d780abbcdd8ce22ebc218ca2efe9e90493d","doc/windows-1256.txt":"c0879c5172abedead302a406e8f60d9cd9598694a0ffa4fd288ffe4fef7b8ea1","doc/windows-1257.txt":"c28a0c9f964fcb2b46d21f537c402446501a2800670481d6abf9fd9e9018d523","doc/windows-1258.txt":"5019ae4d61805c79aacbf17c93793342dbb098d65a1837783bc3e2c6d6a23602","doc/windows-874.txt":"4ef0e4501c5feba8b17aee1818602ed44b36ca8475db771ce2fc16d392cabecc","doc/x-mac-cyrillic.txt":"58be154d8a888ca3d484b83b44f749823ef339ab27f14d90ca9a856f5050a8bd","doc/x-user-defined.txt":"f9cd07c4321bf5cfb0be4bdddd251072999b04a6cf7a6f5bc63709a84e2c1ffc","generate-encoding-data.py":"be989dd25c6b946e3e8745fdc8e8a80fcf24b3be99ad0b4b78153ba3f6ab6310","rustfmt.toml":"85c1a3b4382fd89e991cbb81b70fb52780472edc064c963943cdaaa56e0a2030","src/ascii.rs":"588e38b01e666d5e7462617ea7e90a108d608dec9e016f3d273ac0744af2e05d","src/big5.rs":"ec6e2913011a38e9a3e825a1731f139a7ca1d5b264fefae51a3cc1a68a57cef9","src/data.rs":"8a617cc57032092d65850eb27e00de687c80aea3299e839a1f58b42d0b35abf3","src/euc_jp.rs":"32047f5b540188c4cb19c07165f846b9786a09f18e315ed3e9bda1293dae52aa","src/euc_kr.rs":"9b25afc72d9378700eecfac58d55ad1c5946d6cd0ccde2c29c08200ef2de6bb9","src/gb18030.rs":"808587168d73f0c80f8520f0ca9b161866ed2efeb17a05e85fdf3b8efe7ba28a","src/handles.rs":"b08cef1f5785bb6a4822f2e844c6df1b046b737b7a075e4593eaa8c4208e9fe2","src/iso_2022_jp.rs":"9bb485e82574f4b7d4b2364f0ff276acb6a0bc111758420a3b0ec5e04c196652","src/lib.rs":"834f44b670ec48ee82c0e12223d1567313fdd9f88bca5f4b117c82c1828f559f","src/macros.rs":"200997f8870de8bfd8cdc475e92115df42108c0df661e49d3d1cbc32056e1d99","src/mem.rs":"948571137d3b151df8db4fb2c733e74ae595d055cdf0ad83abcab9341d6adabe","src/replacement.rs":"7660b34a53f8c1ca2bdfa0e51e843ec28326950952ad8bc96569feb93ac62308","src/shift_jis.rs":"6951ae67e36b1a12fa3a30734957f444d8b1b4ae0e2bde52060b29bd0f16d9d9","src/simd_funcs.rs":"05c6e77af74bfe73cd39a752067c11425d6b46e5da419910f54bf75a5c02a984","src/single_byte.rs":"3ad87116fb339434a4b58e8f2b15485f2b66b9f7814d708f16194ed08f6d6ccf","src/test_data/big5_in.txt":"4c5a8691f8dc717311889c63894026d2fb62725a86c4208ca274a9cc8d42a503","src/test_data/big5_in_ref.txt":"99d399e17750cf9c7cf30bb253dbfe35b81c4fcbdead93cfa48b1429213473c7","src/test_data/big5_out.txt":"6193ca97c297aa20e09396038d18e938bb7ea331c26f0f2454097296723a0b13","src/test_data/big5_out_ref.txt":"36567691f557df144f6cc520015a87038dfa156f296fcf103b56ae9a718be1fc","src/test_data/euc_kr_in.txt":"c86a7224f3215fa0d04e685622a752fdc72763e8ae076230c7fd62de57ec4074","src/test_data/euc_kr_in_ref.txt":"1f419f4ca47d708b54c73c461545a022ae2e20498fdbf8005a483d752a204883","src/test_data/euc_kr_out.txt":"e7f32e026f70be1e1b58e0047baf7d3d2c520269c4f9b9992e158b4decb0a1a3","src/test_data/euc_kr_out_ref.txt":"c9907857980b20b8e9e3b584482ed6567a2be6185d72237b6322f0404944924e","src/test_data/gb18030_in.txt":"ab7231b2d3e9afacdbd7d7f3b9e5361a7ff9f7e1cfdb4f3bd905b9362b309e53","src/test_data/gb18030_in_ref.txt":"dc5069421adca2043c55f5012b55a76fdff651d22e6e699fd0978f8d5706815c","src/test_data/gb18030_out.txt":"f0208d527f5ca63de7d9a0323be8d5cf12d8a104b2943d92c2701f0c3364dac1","src/test_data/gb18030_out_ref.txt":"6819fe47627e4ea01027003fc514b9f21a1322e732d7f1fb92cc6c5455bc6c07","src/test_data/iso_2022_jp_in.txt":"cd24bbdcb1834e25db54646fbf4c41560a13dc7540f6be3dba4f5d97d44513af","src/test_data/iso_2022_jp_in_ref.txt":"3dc4e6a5e06471942d086b16c9440945e78415f6f3f47e43717e4bc2eac2cdf5","src/test_data/iso_2022_jp_out.txt":"9b6f015329dda6c3f9ee5ce6dbd6fa9c89acc21283e886836c78b8d833480c21","src/test_data/iso_2022_jp_out_ref.txt":"78cb260093a20116ad9a42f43b05d1848c5ab100b6b9a850749809e943884b35","src/test_data/jis0208_in.txt":"6df3030553ffb0a6615bb33dc8ea9dca6d9623a9028e2ffec754ce3c3da824cc","src/test_data/jis0208_in_ref.txt":"3dc4e6a5e06471942d086b16c9440945e78415f6f3f47e43717e4bc2eac2cdf5","src/test_data/jis0208_out.txt":"4ec24477e1675ce750733bdc3c5add1cd27b6bd4ce1f09289564646e9654e857","src/test_data/jis0208_out_ref.txt":"c3e1cef5032b2b1d93a406f31ff940c4e2dfe8859b8b17ca2761fee7a75a0e48","src/test_data/jis0212_in.txt":"c011f0dd72bd7c8cd922df9374ef8d2769a77190514c77f6c62b415852eeb9fe","src/test_data/jis0212_in_ref.txt":"7d9458b3d2f73e7092a7f505c08ce1d233dde18aa679fbcf9889256239cc9e06","src/test_data/shift_jis_in.txt":"02e389ccef0dd2122e63f503899402cb7f797912c2444cc80ab93131116c5524","src/test_data/shift_jis_in_ref.txt":"512f985950ca902e643c88682dba9708b7c38d3c5ec2925168ab00ac94ab19f9","src/test_data/shift_jis_out.txt":"5fbc44da7bf639bf6cfe0fa1fd3eba7102b88f81919c9ea991302712f69426fb","src/test_data/shift_jis_out_ref.txt":"466322c6fed8286c64582731755290c2296508efdd258826e6279686649b481f","src/test_labels_names.rs":"23a2e11b02b3b8d15fb5613a625e3edb2c61e70e3c581abfd638719a4088200d","src/testing.rs":"f59e671e95a98a56f6b573e8c6be4d71e670bf52f7e20eb1605d990aafa1894e","src/utf_16.rs":"c071a147fad38d750c2c247e141b76b929a48007b99f26b2922b9caecdaf2f25","src/utf_8.rs":"7b7d887b347f1aefa03246b028a36a72758a4ce76c28f3b45c19467851aa7839","src/variant.rs":"1fab5363588a1554a7169de8731ea9cded7ac63ea35caabdd1c27a8dde68c27b","src/x_user_defined.rs":"9456ca46168ef86c98399a2536f577ef7be3cdde90c0c51392d8ac48519d3fae"},"package":"b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59"} +\ No newline at end of file +diff --git a/third_party/rust/encoding_rs/Cargo.toml b/third_party/rust/encoding_rs/Cargo.toml +--- a/third_party/rust/encoding_rs/Cargo.toml ++++ b/third_party/rust/encoding_rs/Cargo.toml +@@ -6,18 +6,19 @@ + # to registry (e.g., crates.io) dependencies. + # + # If you are reading this file be aware that the original Cargo.toml + # will likely look very different (and much more reasonable). + # See Cargo.toml.orig for the original contents. + + [package] + edition = "2018" ++rust-version = "1.36" + name = "encoding_rs" +-version = "0.8.33" ++version = "0.8.34" + authors = ["Henri Sivonen "] + description = "A Gecko-oriented implementation of the Encoding Standard" + homepage = "https://docs.rs/encoding_rs/" + documentation = "https://docs.rs/encoding_rs/" + readme = "README.md" + keywords = [ + "encoding", + "web", +@@ -31,23 +32,23 @@ categories = [ + "internationalization", + ] + license = "(Apache-2.0 OR MIT) AND BSD-3-Clause" + repository = "https://github.com/hsivonen/encoding_rs" + + [profile.release] + lto = true + ++[dependencies.any_all_workaround] ++version = "0.1.0" ++optional = true ++ + [dependencies.cfg-if] + version = "1.0" + +-[dependencies.packed_simd] +-version = "0.3.9" +-optional = true +- + [dependencies.serde] + version = "1.0" + optional = true + + [dev-dependencies.bincode] + version = "1.0" + + [dev-dependencies.serde_derive] +@@ -69,15 +70,9 @@ fast-legacy-encode = [ + "fast-hanja-encode", + "fast-kanji-encode", + "fast-gb-hanzi-encode", + "fast-big5-hanzi-encode", + ] + less-slow-big5-hanzi-encode = [] + less-slow-gb-hanzi-encode = [] + less-slow-kanji-encode = [] +-simd-accel = [ +- "packed_simd", +- "packed_simd/into_bits", +-] +- +-[badges.travis-ci] +-repository = "hsivonen/encoding_rs" ++simd-accel = ["any_all_workaround"] +diff --git a/third_party/rust/encoding_rs/README.md b/third_party/rust/encoding_rs/README.md +--- a/third_party/rust/encoding_rs/README.md ++++ b/third_party/rust/encoding_rs/README.md +@@ -162,50 +162,36 @@ wrappers. + * [C++](https://github.com/hsivonen/recode_cpp) + + ## Optional features + + There are currently these optional cargo features: + + ### `simd-accel` + +-Enables SIMD acceleration using the nightly-dependent `packed_simd` crate. ++Enables SIMD acceleration using the nightly-dependent `portable_simd` standard ++library feature. + + This is an opt-in feature, because enabling this feature _opts out_ of Rust's + guarantees of future compilers compiling old code (aka. "stability story"). + + Currently, this has not been tested to be an improvement except for these +-targets: ++targets and enabling the `simd-accel` feature is expected to break the build ++on other targets: + + * x86_64 + * i686 + * aarch64 + * thumbv7neon + + If you use nightly Rust, you use targets whose first component is one of the + above, and you are prepared _to have to revise your configuration when updating + Rust_, you should enable this feature. Otherwise, please _do not_ enable this + feature. + +-_Note!_ If you are compiling for a target that does not have 128-bit SIMD +-enabled as part of the target definition and you are enabling 128-bit SIMD +-using `-C target_feature`, you need to enable the `core_arch` Cargo feature +-for `packed_simd` to compile a crates.io snapshot of `core_arch` instead of +-using the standard-library copy of `core::arch`, because the `core::arch` +-module of the pre-compiled standard library has been compiled with the +-assumption that the CPU doesn't have 128-bit SIMD. At present this applies +-mainly to 32-bit ARM targets whose first component does not include the +-substring `neon`. +- +-The encoding_rs side of things has not been properly set up for POWER, +-PowerPC, MIPS, etc., SIMD at this time, so even if you were to follow +-the advice from the previous paragraph, you probably shouldn't use +-the `simd-accel` option on the less mainstream architectures at this +-time. +- + Used by Firefox. + + ### `serde` + + Enables support for serializing and deserializing `&'static Encoding`-typed + struct fields using [Serde][1]. + + [1]: https://serde.rs/ +@@ -376,18 +362,19 @@ It is a goal to support the latest stabl + the version of Rust that's used for Firefox Nightly. + + At this time, there is no firm commitment to support a version older than + what's required by Firefox, and there is no commitment to treat MSRV changes + as semver-breaking, because this crate depends on `cfg-if`, which doesn't + appear to treat MSRV changes as semver-breaking, so it would be useless for + this crate to treat MSRV changes as semver-breaking. + +-As of 2021-02-04, MSRV appears to be Rust 1.36.0 for using the crate and ++As of 2024-04-04, MSRV appears to be Rust 1.36.0 for using the crate and + 1.42.0 for doc tests to pass without errors about the global allocator. ++With the `simd-accel` feature, the MSRV is even higher. + + ## Compatibility with rust-encoding + + A compatibility layer that implements the rust-encoding API on top of + encoding_rs is + [provided as a separate crate](https://github.com/hsivonen/encoding_rs_compat) + (cannot be uploaded to crates.io). The compatibility layer was originally + written with the assuption that Firefox would need it, but it is not currently +@@ -441,20 +428,27 @@ To regenerate the generated code: + - [x] Implement the rust-encoding API in terms of encoding_rs. + - [x] Add SIMD acceleration for Aarch64. + - [x] Investigate the use of NEON on 32-bit ARM. + - [ ] ~Investigate Björn Höhrmann's lookup table acceleration for UTF-8 as + adapted to Rust in rust-encoding.~ + - [x] Add actually fast CJK encode options. + - [ ] ~Investigate [Bob Steagall's lookup table acceleration for UTF-8](https://github.com/BobSteagall/CppNow2018/blob/master/FastConversionFromUTF-8/Fast%20Conversion%20From%20UTF-8%20with%20C%2B%2B%2C%20DFAs%2C%20and%20SSE%20Intrinsics%20-%20Bob%20Steagall%20-%20C%2B%2BNow%202018.pdf).~ + - [x] Provide a build mode that works without `alloc` (with lesser API surface). +-- [ ] Migrate to `std::simd` once it is stable and declare 1.0. ++- [x] Migrate to `std::simd` ~once it is stable and declare 1.0.~ ++- [ ] Migrate `unsafe` slice access by larger types than `u8`/`u16` to `align_to`. + + ## Release Notes + ++### 0.8.34 ++ ++* Use the `portable_simd` nightly feature of the standard library instead of the `packed_simd` crate. Only affects the `simd-accel` optional nightly feature. ++* Internal documentation improvements and minor code improvements around `unsafe`. ++* Added `rust-version` to `Cargo.toml`. ++ + ### 0.8.33 + + * Use `packed_simd` instead of `packed_simd_2` again now that updates are back under the `packed_simd` name. Only affects the `simd-accel` optional nightly feature. + + ### 0.8.32 + + * Removed `build.rs`. (This removal should resolve false positives reported by some antivirus products. This may break some build configurations that have opted out of Rust's guarantees against future build breakage.) + * Internal change to what API is used for reinterpreting the lane configuration of SIMD vectors. +diff --git a/third_party/rust/encoding_rs/src/ascii.rs b/third_party/rust/encoding_rs/src/ascii.rs +--- a/third_party/rust/encoding_rs/src/ascii.rs ++++ b/third_party/rust/encoding_rs/src/ascii.rs +@@ -46,71 +46,87 @@ cfg_if! { + #[allow(dead_code)] + #[inline(always)] + fn likely(b: bool) -> bool { + b + } + } + } + ++// Safety invariants for masks: data & mask = 0 for valid ASCII or basic latin utf-16 ++ + // `as` truncates, so works on 32-bit, too. + #[allow(dead_code)] + pub const ASCII_MASK: usize = 0x8080_8080_8080_8080u64 as usize; + + // `as` truncates, so works on 32-bit, too. + #[allow(dead_code)] + pub const BASIC_LATIN_MASK: usize = 0xFF80_FF80_FF80_FF80u64 as usize; + + #[allow(unused_macros)] + macro_rules! ascii_naive { + ($name:ident, $src_unit:ty, $dst_unit:ty) => { ++ /// Safety: src and dst must have len_unit elements and be aligned ++ /// Safety-usable invariant: will return Some() when it fails ++ /// to convert. The first value will be a u8 that is > 127. + #[inline(always)] + pub unsafe fn $name( + src: *const $src_unit, + dst: *mut $dst_unit, + len: usize, + ) -> Option<($src_unit, usize)> { + // Yes, manually omitting the bound check here matters + // a lot for perf. + for i in 0..len { ++ // Safety: len invariant used here + let code_unit = *(src.add(i)); ++ // Safety: Upholds safety-usable invariant here + if code_unit > 127 { + return Some((code_unit, i)); + } ++ // Safety: len invariant used here + *(dst.add(i)) = code_unit as $dst_unit; + } + return None; + } + }; + } + + #[allow(unused_macros)] + macro_rules! ascii_alu { + ($name:ident, ++ // safety invariant: src/dst MUST be u8 + $src_unit:ty, + $dst_unit:ty, ++ // Safety invariant: stride_fn must consume and produce two usizes, and return the index of the first non-ascii when it fails + $stride_fn:ident) => { ++ /// Safety: src and dst must have len elements, src is valid for read, dst is valid for ++ /// write ++ /// Safety-usable invariant: will return Some() when it fails ++ /// to convert. The first value will be a u8 that is > 127. + #[cfg_attr(feature = "cargo-clippy", allow(never_loop, cast_ptr_alignment))] + #[inline(always)] + pub unsafe fn $name( + src: *const $src_unit, + dst: *mut $dst_unit, + len: usize, + ) -> Option<($src_unit, usize)> { + let mut offset = 0usize; + // This loop is only broken out of as a `goto` forward + loop { ++ // Safety: until_alignment becomes the number of bytes we need to munch until we are aligned to usize + let mut until_alignment = { + // Check if the other unit aligns if we move the narrower unit + // to alignment. + // if ::core::mem::size_of::<$src_unit>() == ::core::mem::size_of::<$dst_unit>() { + // ascii_to_ascii + let src_alignment = (src as usize) & ALU_ALIGNMENT_MASK; + let dst_alignment = (dst as usize) & ALU_ALIGNMENT_MASK; + if src_alignment != dst_alignment { ++ // Safety: bails early and ends up in the naïve branch where usize-alignment doesn't matter + break; + } + (ALU_ALIGNMENT - src_alignment) & ALU_ALIGNMENT_MASK + // } else if ::core::mem::size_of::<$src_unit>() < ::core::mem::size_of::<$dst_unit>() { + // ascii_to_basic_latin + // let src_until_alignment = (ALIGNMENT - ((src as usize) & ALIGNMENT_MASK)) & ALIGNMENT_MASK; + // if (dst.add(src_until_alignment) as usize) & ALIGNMENT_MASK != 0 { + // break; +@@ -129,74 +145,104 @@ macro_rules! ascii_alu { + // Moving pointers to alignment seems to be a pessimization on + // x86_64 for operations that have UTF-16 as the internal + // Unicode representation. However, since it seems to be a win + // on ARM (tested ARMv7 code running on ARMv8 [rpi3]), except + // mixed results when encoding from UTF-16 and since x86 and + // x86_64 should be using SSE2 in due course, keeping the move + // to alignment here. It would be good to test on more ARM CPUs + // and on real MIPS and POWER hardware. ++ // ++ // Safety: This is the naïve code once again, for `until_alignment` bytes + while until_alignment != 0 { + let code_unit = *(src.add(offset)); + if code_unit > 127 { ++ // Safety: Upholds safety-usable invariant here + return Some((code_unit, offset)); + } + *(dst.add(offset)) = code_unit as $dst_unit; ++ // Safety: offset is the number of bytes copied so far + offset += 1; + until_alignment -= 1; + } + let len_minus_stride = len - ALU_STRIDE_SIZE; + loop { ++ // Safety: num_ascii is known to be a byte index of a non-ascii byte due to stride_fn's invariant + if let Some(num_ascii) = $stride_fn( ++ // Safety: These are known to be valid and aligned since we have at ++ // least ALU_STRIDE_SIZE data in these buffers, and offset is the ++ // number of elements copied so far, which according to the ++ // until_alignment calculation above will cause both src and dst to be ++ // aligned to usize after this add + src.add(offset) as *const usize, + dst.add(offset) as *mut usize, + ) { + offset += num_ascii; ++ // Safety: Upholds safety-usable invariant here by indexing into non-ascii byte + return Some((*(src.add(offset)), offset)); + } ++ // Safety: offset continues to be the number of bytes copied so far, and ++ // maintains usize alignment for the next loop iteration + offset += ALU_STRIDE_SIZE; ++ // Safety: This is `offset > len - stride. This loop will continue as long as ++ // `offset <= len - stride`, which means there are `stride` bytes to still be read. + if offset > len_minus_stride { + break; + } + } + } + break; + } ++ ++ // Safety: This is the naïve code, same as ascii_naive, and has no requirements ++ // other than src/dst being valid for the the right lens + while offset < len { ++ // Safety: len invariant used here + let code_unit = *(src.add(offset)); + if code_unit > 127 { ++ // Safety: Upholds safety-usable invariant here + return Some((code_unit, offset)); + } ++ // Safety: len invariant used here + *(dst.add(offset)) = code_unit as $dst_unit; + offset += 1; + } + None + } + }; + } + + #[allow(unused_macros)] + macro_rules! basic_latin_alu { + ($name:ident, ++ // safety invariant: use u8 for src/dest for ascii, and u16 for basic_latin + $src_unit:ty, + $dst_unit:ty, ++ // safety invariant: stride function must munch ALU_STRIDE_SIZE*size(src_unit) bytes off of src and ++ // write ALU_STRIDE_SIZE*size(dst_unit) bytes to dst + $stride_fn:ident) => { ++ /// Safety: src and dst must have len elements, src is valid for read, dst is valid for ++ /// write ++ /// Safety-usable invariant: will return Some() when it fails ++ /// to convert. The first value will be a u8 that is > 127. + #[cfg_attr( + feature = "cargo-clippy", + allow(never_loop, cast_ptr_alignment, cast_lossless) + )] + #[inline(always)] + pub unsafe fn $name( + src: *const $src_unit, + dst: *mut $dst_unit, + len: usize, + ) -> Option<($src_unit, usize)> { + let mut offset = 0usize; + // This loop is only broken out of as a `goto` forward + loop { ++ // Safety: until_alignment becomes the number of bytes we need to munch from src/dest until we are aligned to usize ++ // We ensure basic-latin has the same alignment as ascii, starting with ascii since it is smaller. + let mut until_alignment = { + // Check if the other unit aligns if we move the narrower unit + // to alignment. + // if ::core::mem::size_of::<$src_unit>() == ::core::mem::size_of::<$dst_unit>() { + // ascii_to_ascii + // let src_alignment = (src as usize) & ALIGNMENT_MASK; + // let dst_alignment = (dst as usize) & ALIGNMENT_MASK; + // if src_alignment != dst_alignment { +@@ -232,66 +278,89 @@ macro_rules! basic_latin_alu { + // Moving pointers to alignment seems to be a pessimization on + // x86_64 for operations that have UTF-16 as the internal + // Unicode representation. However, since it seems to be a win + // on ARM (tested ARMv7 code running on ARMv8 [rpi3]), except + // mixed results when encoding from UTF-16 and since x86 and + // x86_64 should be using SSE2 in due course, keeping the move + // to alignment here. It would be good to test on more ARM CPUs + // and on real MIPS and POWER hardware. ++ // ++ // Safety: This is the naïve code once again, for `until_alignment` bytes + while until_alignment != 0 { + let code_unit = *(src.add(offset)); + if code_unit > 127 { ++ // Safety: Upholds safety-usable invariant here + return Some((code_unit, offset)); + } + *(dst.add(offset)) = code_unit as $dst_unit; ++ // Safety: offset is the number of bytes copied so far + offset += 1; + until_alignment -= 1; + } + let len_minus_stride = len - ALU_STRIDE_SIZE; + loop { + if !$stride_fn( ++ // Safety: These are known to be valid and aligned since we have at ++ // least ALU_STRIDE_SIZE data in these buffers, and offset is the ++ // number of elements copied so far, which according to the ++ // until_alignment calculation above will cause both src and dst to be ++ // aligned to usize after this add + src.add(offset) as *const usize, + dst.add(offset) as *mut usize, + ) { + break; + } ++ // Safety: offset continues to be the number of bytes copied so far, and ++ // maintains usize alignment for the next loop iteration + offset += ALU_STRIDE_SIZE; ++ // Safety: This is `offset > len - stride. This loop will continue as long as ++ // `offset <= len - stride`, which means there are `stride` bytes to still be read. + if offset > len_minus_stride { + break; + } + } + } + break; + } ++ // Safety: This is the naïve code once again, for leftover bytes + while offset < len { ++ // Safety: len invariant used here + let code_unit = *(src.add(offset)); + if code_unit > 127 { ++ // Safety: Upholds safety-usable invariant here + return Some((code_unit, offset)); + } ++ // Safety: len invariant used here + *(dst.add(offset)) = code_unit as $dst_unit; + offset += 1; + } + None + } + }; + } + + #[allow(unused_macros)] + macro_rules! latin1_alu { ++ // safety invariant: stride function must munch ALU_STRIDE_SIZE*size(src_unit) bytes off of src and ++ // write ALU_STRIDE_SIZE*size(dst_unit) bytes to dst + ($name:ident, $src_unit:ty, $dst_unit:ty, $stride_fn:ident) => { ++ /// Safety: src and dst must have len elements, src is valid for read, dst is valid for ++ /// write + #[cfg_attr( + feature = "cargo-clippy", + allow(never_loop, cast_ptr_alignment, cast_lossless) + )] + #[inline(always)] + pub unsafe fn $name(src: *const $src_unit, dst: *mut $dst_unit, len: usize) { + let mut offset = 0usize; + // This loop is only broken out of as a `goto` forward + loop { ++ // Safety: until_alignment becomes the number of bytes we need to munch from src/dest until we are aligned to usize ++ // We ensure the UTF-16 side has the same alignment as the Latin-1 side, starting with Latin-1 since it is smaller. + let mut until_alignment = { + if ::core::mem::size_of::<$src_unit>() < ::core::mem::size_of::<$dst_unit>() { + // unpack + let src_until_alignment = (ALU_ALIGNMENT + - ((src as usize) & ALU_ALIGNMENT_MASK)) + & ALU_ALIGNMENT_MASK; + if (dst.wrapping_add(src_until_alignment) as usize) & ALU_ALIGNMENT_MASK + != 0 +@@ -308,373 +377,485 @@ macro_rules! latin1_alu { + != 0 + { + break; + } + dst_until_alignment + } + }; + if until_alignment + ALU_STRIDE_SIZE <= len { ++ // Safety: This is the naïve code once again, for `until_alignment` bytes + while until_alignment != 0 { + let code_unit = *(src.add(offset)); + *(dst.add(offset)) = code_unit as $dst_unit; ++ // Safety: offset is the number of bytes copied so far + offset += 1; + until_alignment -= 1; + } + let len_minus_stride = len - ALU_STRIDE_SIZE; + loop { + $stride_fn( ++ // Safety: These are known to be valid and aligned since we have at ++ // least ALU_STRIDE_SIZE data in these buffers, and offset is the ++ // number of elements copied so far, which according to the ++ // until_alignment calculation above will cause both src and dst to be ++ // aligned to usize after this add + src.add(offset) as *const usize, + dst.add(offset) as *mut usize, + ); ++ // Safety: offset continues to be the number of bytes copied so far, and ++ // maintains usize alignment for the next loop iteration + offset += ALU_STRIDE_SIZE; ++ // Safety: This is `offset > len - stride. This loop will continue as long as ++ // `offset <= len - stride`, which means there are `stride` bytes to still be read. + if offset > len_minus_stride { + break; + } + } + } + break; + } ++ // Safety: This is the naïve code once again, for leftover bytes + while offset < len { ++ // Safety: len invariant used here + let code_unit = *(src.add(offset)); + *(dst.add(offset)) = code_unit as $dst_unit; + offset += 1; + } + } + }; + } + + #[allow(unused_macros)] + macro_rules! ascii_simd_check_align { + ( + $name:ident, + $src_unit:ty, + $dst_unit:ty, ++ // Safety: This function must require aligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_both_aligned:ident, ++ // Safety: This function must require aligned/unaligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_src_aligned:ident, ++ // Safety: This function must require unaligned/aligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_dst_aligned:ident, ++ // Safety: This function must require unaligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_neither_aligned:ident + ) => { ++ /// Safety: src/dst must be valid for reads/writes of `len` elements of their units. ++ /// ++ /// Safety-usable invariant: will return Some() when it encounters non-ASCII, with the first element in the Some being ++ /// guaranteed to be non-ASCII (> 127), and the second being the offset where it is found + #[inline(always)] + pub unsafe fn $name( + src: *const $src_unit, + dst: *mut $dst_unit, + len: usize, + ) -> Option<($src_unit, usize)> { + let mut offset = 0usize; ++ // Safety: if this check succeeds we're valid for reading/writing at least `SIMD_STRIDE_SIZE` elements. + if SIMD_STRIDE_SIZE <= len { + let len_minus_stride = len - SIMD_STRIDE_SIZE; + // XXX Should we first process one stride unconditionally as unaligned to + // avoid the cost of the branchiness below if the first stride fails anyway? + // XXX Should we just use unaligned SSE2 access unconditionally? It seems that + // on Haswell, it would make sense to just use unaligned and not bother + // checking. Need to benchmark older architectures before deciding. + let dst_masked = (dst as usize) & SIMD_ALIGNMENT_MASK; ++ // Safety: checking whether src is aligned + if ((src as usize) & SIMD_ALIGNMENT_MASK) == 0 { ++ // Safety: Checking whether dst is aligned + if dst_masked == 0 { + loop { ++ // Safety: We're valid to read/write SIMD_STRIDE_SIZE elements and have the appropriate alignments + if !$stride_both_aligned(src.add(offset), dst.add(offset)) { + break; + } + offset += SIMD_STRIDE_SIZE; ++ // Safety: This is `offset > len - SIMD_STRIDE_SIZE` which means we always have at least `SIMD_STRIDE_SIZE` elements to munch next time. + if offset > len_minus_stride { + break; + } + } + } else { + loop { ++ // Safety: We're valid to read/write SIMD_STRIDE_SIZE elements and have the appropriate alignments + if !$stride_src_aligned(src.add(offset), dst.add(offset)) { + break; + } + offset += SIMD_STRIDE_SIZE; ++ // Safety: This is `offset > len - SIMD_STRIDE_SIZE` which means we always have at least `SIMD_STRIDE_SIZE` elements to munch next time. + if offset > len_minus_stride { + break; + } + } + } + } else { + if dst_masked == 0 { + loop { ++ // Safety: We're valid to read/write SIMD_STRIDE_SIZE elements and have the appropriate alignments + if !$stride_dst_aligned(src.add(offset), dst.add(offset)) { + break; + } + offset += SIMD_STRIDE_SIZE; ++ // Safety: This is `offset > len - SIMD_STRIDE_SIZE` which means we always have at least `SIMD_STRIDE_SIZE` elements to munch next time. + if offset > len_minus_stride { + break; + } + } + } else { + loop { ++ // Safety: We're valid to read/write SIMD_STRIDE_SIZE elements and have the appropriate alignments + if !$stride_neither_aligned(src.add(offset), dst.add(offset)) { + break; + } + offset += SIMD_STRIDE_SIZE; ++ // Safety: This is `offset > len - SIMD_STRIDE_SIZE` which means we always have at least `SIMD_STRIDE_SIZE` elements to munch next time. + if offset > len_minus_stride { + break; + } + } + } + } + } + while offset < len { ++ // Safety: uses len invariant here and below + let code_unit = *(src.add(offset)); + if code_unit > 127 { ++ // Safety: upholds safety-usable invariant + return Some((code_unit, offset)); + } + *(dst.add(offset)) = code_unit as $dst_unit; + offset += 1; + } + None + } + }; + } + + #[allow(unused_macros)] + macro_rules! ascii_simd_check_align_unrolled { + ( + $name:ident, + $src_unit:ty, + $dst_unit:ty, ++ // Safety: This function must require aligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_both_aligned:ident, ++ // Safety: This function must require aligned/unaligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_src_aligned:ident, ++ // Safety: This function must require unaligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_neither_aligned:ident, ++ // Safety: This function must require aligned src/dest that are valid for reading/writing 2*SIMD_STRIDE_SIZE src_unit/dst_unit + $double_stride_both_aligned:ident, ++ // Safety: This function must require aligned/unaligned src/dest that are valid for reading/writing 2*SIMD_STRIDE_SIZE src_unit/dst_unit + $double_stride_src_aligned:ident + ) => { +- #[inline(always)] ++ /// Safety: src/dst must be valid for reads/writes of `len` elements of their units. ++ /// ++ /// Safety-usable invariant: will return Some() when it encounters non-ASCII, with the first element in the Some being ++ /// guaranteed to be non-ASCII (> 127), and the second being the offset where it is found #[inline(always)] + pub unsafe fn $name( + src: *const $src_unit, + dst: *mut $dst_unit, + len: usize, + ) -> Option<($src_unit, usize)> { + let unit_size = ::core::mem::size_of::<$src_unit>(); + let mut offset = 0usize; + // This loop is only broken out of as a goto forward without + // actually looping + 'outer: loop { ++ // Safety: if this check succeeds we're valid for reading/writing at least `SIMD_STRIDE_SIZE` elements. + if SIMD_STRIDE_SIZE <= len { + // First, process one unaligned ++ // Safety: this is safe to call since we're valid for this read/write + if !$stride_neither_aligned(src, dst) { + break 'outer; + } + offset = SIMD_STRIDE_SIZE; + + // We have now seen 16 ASCII bytes. Let's guess that + // there will be enough more to justify more expense + // in the case of non-ASCII. + // Use aligned reads for the sake of old microachitectures. ++ // ++ // Safety: this correctly calculates the number of src_units that need to be read before the remaining list is aligned. ++ // This is less that SIMD_ALIGNMENT, which is also SIMD_STRIDE_SIZE (as documented) + let until_alignment = ((SIMD_ALIGNMENT + - ((src.add(offset) as usize) & SIMD_ALIGNMENT_MASK)) + & SIMD_ALIGNMENT_MASK) + / unit_size; +- // This addition won't overflow, because even in the 32-bit PAE case the ++ // Safety: This addition won't overflow, because even in the 32-bit PAE case the + // address space holds enough code that the slice length can't be that + // close to address space size. + // offset now equals SIMD_STRIDE_SIZE, hence times 3 below. ++ // ++ // Safety: if this check succeeds we're valid for reading/writing at least `2 * SIMD_STRIDE_SIZE` elements plus `until_alignment`. ++ // The extra SIMD_STRIDE_SIZE in the condition is because `offset` is already `SIMD_STRIDE_SIZE`. + if until_alignment + (SIMD_STRIDE_SIZE * 3) <= len { + if until_alignment != 0 { ++ // Safety: this is safe to call since we're valid for this read/write (and more), and don't care about alignment ++ // This will copy over bytes that get decoded twice since it's not incrementing `offset` by SIMD_STRIDE_SIZE. This is fine. + if !$stride_neither_aligned(src.add(offset), dst.add(offset)) { + break; + } + offset += until_alignment; + } ++ // Safety: At this point we're valid for reading/writing 2*SIMD_STRIDE_SIZE elements ++ // Safety: Now `offset` is aligned for `src` + let len_minus_stride_times_two = len - (SIMD_STRIDE_SIZE * 2); ++ // Safety: This is whether dst is aligned + let dst_masked = (dst.add(offset) as usize) & SIMD_ALIGNMENT_MASK; + if dst_masked == 0 { + loop { ++ // Safety: both are aligned, we can call the aligned function. We're valid for reading/writing double stride from the initial condition ++ // and the loop break condition below + if let Some(advance) = + $double_stride_both_aligned(src.add(offset), dst.add(offset)) + { + offset += advance; + let code_unit = *(src.add(offset)); ++ // Safety: uses safety-usable invariant on ascii_to_ascii_simd_double_stride to return ++ // guaranteed non-ascii + return Some((code_unit, offset)); + } + offset += SIMD_STRIDE_SIZE * 2; ++ // Safety: This is `offset > len - 2 * SIMD_STRIDE_SIZE` which means we always have at least `2 * SIMD_STRIDE_SIZE` elements to munch next time. + if offset > len_minus_stride_times_two { + break; + } + } ++ // Safety: We're valid for reading/writing one more, and can still assume alignment + if offset + SIMD_STRIDE_SIZE <= len { + if !$stride_both_aligned(src.add(offset), dst.add(offset)) { + break 'outer; + } + offset += SIMD_STRIDE_SIZE; + } + } else { + loop { ++ // Safety: only src is aligned here. We're valid for reading/writing double stride from the initial condition ++ // and the loop break condition below + if let Some(advance) = + $double_stride_src_aligned(src.add(offset), dst.add(offset)) + { + offset += advance; + let code_unit = *(src.add(offset)); ++ // Safety: uses safety-usable invariant on ascii_to_ascii_simd_double_stride to return ++ // guaranteed non-ascii + return Some((code_unit, offset)); + } + offset += SIMD_STRIDE_SIZE * 2; ++ // Safety: This is `offset > len - 2 * SIMD_STRIDE_SIZE` which means we always have at least `2 * SIMD_STRIDE_SIZE` elements to munch next time. ++ + if offset > len_minus_stride_times_two { + break; + } + } ++ // Safety: We're valid for reading/writing one more, and can still assume alignment + if offset + SIMD_STRIDE_SIZE <= len { + if !$stride_src_aligned(src.add(offset), dst.add(offset)) { + break 'outer; + } + offset += SIMD_STRIDE_SIZE; + } + } + } else { + // At most two iterations, so unroll + if offset + SIMD_STRIDE_SIZE <= len { ++ // Safety: The check above ensures we're allowed to read/write this, and we don't use alignment + if !$stride_neither_aligned(src.add(offset), dst.add(offset)) { + break; + } + offset += SIMD_STRIDE_SIZE; + if offset + SIMD_STRIDE_SIZE <= len { ++ // Safety: The check above ensures we're allowed to read/write this, and we don't use alignment + if !$stride_neither_aligned(src.add(offset), dst.add(offset)) { + break; + } + offset += SIMD_STRIDE_SIZE; + } + } + } + } + break 'outer; + } + while offset < len { ++ // Safety: relies straightforwardly on the `len` invariant + let code_unit = *(src.add(offset)); + if code_unit > 127 { ++ // Safety-usable invariant upheld here + return Some((code_unit, offset)); + } + *(dst.add(offset)) = code_unit as $dst_unit; + offset += 1; + } + None + } + }; + } + + #[allow(unused_macros)] + macro_rules! latin1_simd_check_align { + ( + $name:ident, + $src_unit:ty, + $dst_unit:ty, ++ // Safety: This function must require aligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_both_aligned:ident, ++ // Safety: This function must require aligned/unaligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_src_aligned:ident, ++ // Safety: This function must require unaligned/aligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_dst_aligned:ident, ++ // Safety: This function must require unaligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_neither_aligned:ident ++ + ) => { ++ /// Safety: src/dst must be valid for reads/writes of `len` elements of their units. + #[inline(always)] + pub unsafe fn $name(src: *const $src_unit, dst: *mut $dst_unit, len: usize) { + let mut offset = 0usize; ++ // Safety: if this check succeeds we're valid for reading/writing at least `SIMD_STRIDE_SIZE` elements. + if SIMD_STRIDE_SIZE <= len { + let len_minus_stride = len - SIMD_STRIDE_SIZE; ++ // Whether dst is aligned + let dst_masked = (dst as usize) & SIMD_ALIGNMENT_MASK; ++ // Whether src is aligned + if ((src as usize) & SIMD_ALIGNMENT_MASK) == 0 { + if dst_masked == 0 { + loop { ++ // Safety: Both were aligned, we can use the aligned function + $stride_both_aligned(src.add(offset), dst.add(offset)); + offset += SIMD_STRIDE_SIZE; ++ // Safety: This is `offset > len - SIMD_STRIDE_SIZE`, which means in the next iteration we're valid for ++ // reading/writing at least SIMD_STRIDE_SIZE elements. + if offset > len_minus_stride { + break; + } + } + } else { + loop { ++ // Safety: src was aligned, dst was not + $stride_src_aligned(src.add(offset), dst.add(offset)); + offset += SIMD_STRIDE_SIZE; ++ // Safety: This is `offset > len - SIMD_STRIDE_SIZE`, which means in the next iteration we're valid for ++ // reading/writing at least SIMD_STRIDE_SIZE elements. + if offset > len_minus_stride { + break; + } + } + } + } else { + if dst_masked == 0 { + loop { ++ // Safety: src was aligned, dst was not + $stride_dst_aligned(src.add(offset), dst.add(offset)); + offset += SIMD_STRIDE_SIZE; ++ // Safety: This is `offset > len - SIMD_STRIDE_SIZE`, which means in the next iteration we're valid for ++ // reading/writing at least SIMD_STRIDE_SIZE elements. + if offset > len_minus_stride { + break; + } + } + } else { + loop { ++ // Safety: Neither were aligned + $stride_neither_aligned(src.add(offset), dst.add(offset)); + offset += SIMD_STRIDE_SIZE; ++ // Safety: This is `offset > len - SIMD_STRIDE_SIZE`, which means in the next iteration we're valid for ++ // reading/writing at least SIMD_STRIDE_SIZE elements. + if offset > len_minus_stride { + break; + } + } + } + } + } + while offset < len { ++ // Safety: relies straightforwardly on the `len` invariant + let code_unit = *(src.add(offset)); + *(dst.add(offset)) = code_unit as $dst_unit; + offset += 1; + } + } + }; + } + + #[allow(unused_macros)] + macro_rules! latin1_simd_check_align_unrolled { + ( + $name:ident, + $src_unit:ty, + $dst_unit:ty, ++ // Safety: This function must require aligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_both_aligned:ident, ++ // Safety: This function must require aligned/unaligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_src_aligned:ident, ++ // Safety: This function must require unaligned/aligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_dst_aligned:ident, ++ // Safety: This function must require unaligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_neither_aligned:ident + ) => { ++ /// Safety: src/dst must be valid for reads/writes of `len` elements of their units. + #[inline(always)] + pub unsafe fn $name(src: *const $src_unit, dst: *mut $dst_unit, len: usize) { + let unit_size = ::core::mem::size_of::<$src_unit>(); + let mut offset = 0usize; ++ // Safety: if this check succeeds we're valid for reading/writing at least `SIMD_STRIDE_SIZE` elements. + if SIMD_STRIDE_SIZE <= len { ++ // Safety: this correctly calculates the number of src_units that need to be read before the remaining list is aligned. ++ // This is by definition less than SIMD_STRIDE_SIZE. + let mut until_alignment = ((SIMD_STRIDE_SIZE + - ((src as usize) & SIMD_ALIGNMENT_MASK)) + & SIMD_ALIGNMENT_MASK) + / unit_size; + while until_alignment != 0 { ++ // Safety: This is a straightforward copy, since until_alignment is < SIMD_STRIDE_SIZE < len, this is in-bounds + *(dst.add(offset)) = *(src.add(offset)) as $dst_unit; + offset += 1; + until_alignment -= 1; + } ++ // Safety: here offset will be `until_alignment`, i.e. enough to align `src`. + let len_minus_stride = len - SIMD_STRIDE_SIZE; ++ // Safety: if this check succeeds we're valid for reading/writing at least `2 * SIMD_STRIDE_SIZE` elements. + if offset + SIMD_STRIDE_SIZE * 2 <= len { + let len_minus_stride_times_two = len_minus_stride - SIMD_STRIDE_SIZE; ++ // Safety: at this point src is known to be aligned at offset, dst is not. + if (dst.add(offset) as usize) & SIMD_ALIGNMENT_MASK == 0 { + loop { ++ // Safety: We checked alignment of dst above, we can use the alignment functions. We're allowed to read/write 2*SIMD_STRIDE_SIZE elements, which we do. + $stride_both_aligned(src.add(offset), dst.add(offset)); + offset += SIMD_STRIDE_SIZE; + $stride_both_aligned(src.add(offset), dst.add(offset)); + offset += SIMD_STRIDE_SIZE; ++ // Safety: This is `offset > len - 2 * SIMD_STRIDE_SIZE` which means we always have at least `2 * SIMD_STRIDE_SIZE` elements to munch next time. + if offset > len_minus_stride_times_two { + break; + } + } + } else { + loop { ++ // Safety: we ensured alignment of src already. + $stride_src_aligned(src.add(offset), dst.add(offset)); + offset += SIMD_STRIDE_SIZE; + $stride_src_aligned(src.add(offset), dst.add(offset)); + offset += SIMD_STRIDE_SIZE; ++ // Safety: This is `offset > len - 2 * SIMD_STRIDE_SIZE` which means we always have at least `2 * SIMD_STRIDE_SIZE` elements to munch next time. + if offset > len_minus_stride_times_two { + break; + } + } + } + } ++ // Safety: This is `offset > len - SIMD_STRIDE_SIZE` which means we are valid to munch SIMD_STRIDE_SIZE more elements, which we do + if offset < len_minus_stride { + $stride_src_aligned(src.add(offset), dst.add(offset)); + offset += SIMD_STRIDE_SIZE; + } + } + while offset < len { ++ // Safety: uses len invariant here and below + let code_unit = *(src.add(offset)); + // On x86_64, this loop autovectorizes but in the pack + // case there are instructions whose purpose is to make sure + // each u16 in the vector is truncated before packing. However, + // since we don't care about saturating behavior of SSE2 packing + // when the input isn't Latin1, those instructions are useless. + // Unfortunately, using the `assume` intrinsic to lie to the + // optimizer doesn't make LLVM omit the trunctation that we +@@ -688,138 +869,180 @@ macro_rules! latin1_simd_check_align_unr + offset += 1; + } + } + }; + } + + #[allow(unused_macros)] + macro_rules! ascii_simd_unalign { ++ // Safety: stride_neither_aligned must be a function that requires src/dest be valid for unaligned reads/writes for SIMD_STRIDE_SIZE elements of type src_unit/dest_unit + ($name:ident, $src_unit:ty, $dst_unit:ty, $stride_neither_aligned:ident) => { ++ /// Safety: src and dst must be valid for reads/writes of len elements of type src_unit/dst_unit ++ /// ++ /// Safety-usable invariant: will return Some() when it encounters non-ASCII, with the first element in the Some being ++ /// guaranteed to be non-ASCII (> 127), and the second being the offset where it is found + #[inline(always)] + pub unsafe fn $name( + src: *const $src_unit, + dst: *mut $dst_unit, + len: usize, + ) -> Option<($src_unit, usize)> { + let mut offset = 0usize; ++ // Safety: if this check succeeds we're valid for reading/writing at least `stride` elements. + if SIMD_STRIDE_SIZE <= len { + let len_minus_stride = len - SIMD_STRIDE_SIZE; + loop { ++ // Safety: We know we're valid for `stride` reads/writes, so we can call this function. We don't need alignment. + if !$stride_neither_aligned(src.add(offset), dst.add(offset)) { + break; + } + offset += SIMD_STRIDE_SIZE; ++ // This is `offset > len - stride` which means we always have at least `stride` elements to munch next time. + if offset > len_minus_stride { + break; + } + } + } + while offset < len { ++ // Safety: Uses len invariant here and below + let code_unit = *(src.add(offset)); + if code_unit > 127 { ++ // Safety-usable invariant upheld here + return Some((code_unit, offset)); + } + *(dst.add(offset)) = code_unit as $dst_unit; + offset += 1; + } + None + } + }; + } + + #[allow(unused_macros)] + macro_rules! latin1_simd_unalign { ++ // Safety: stride_neither_aligned must be a function that requires src/dest be valid for unaligned reads/writes for SIMD_STRIDE_SIZE elements of type src_unit/dest_unit + ($name:ident, $src_unit:ty, $dst_unit:ty, $stride_neither_aligned:ident) => { ++ /// Safety: src and dst must be valid for unaligned reads/writes of len elements of type src_unit/dst_unit + #[inline(always)] + pub unsafe fn $name(src: *const $src_unit, dst: *mut $dst_unit, len: usize) { + let mut offset = 0usize; ++ // Safety: if this check succeeds we're valid for reading/writing at least `stride` elements. + if SIMD_STRIDE_SIZE <= len { + let len_minus_stride = len - SIMD_STRIDE_SIZE; + loop { ++ // Safety: We know we're valid for `stride` reads/writes, so we can call this function. We don't need alignment. + $stride_neither_aligned(src.add(offset), dst.add(offset)); + offset += SIMD_STRIDE_SIZE; ++ // This is `offset > len - stride` which means we always have at least `stride` elements to munch next time. + if offset > len_minus_stride { + break; + } + } + } + while offset < len { ++ // Safety: Uses len invariant here + let code_unit = *(src.add(offset)); + *(dst.add(offset)) = code_unit as $dst_unit; + offset += 1; + } + } + }; + } + + #[allow(unused_macros)] + macro_rules! ascii_to_ascii_simd_stride { ++ // Safety: load/store must be valid for 16 bytes of read/write, which may be unaligned. (candidates: `(load|store)(16|8)_(unaligned|aligned)` functions) + ($name:ident, $load:ident, $store:ident) => { ++ /// Safety: src and dst must be valid for 16 bytes of read/write according to ++ /// the $load/$store fn, which may allow for unaligned reads/writes or require ++ /// alignment to either 16x8 or u8x16. + #[inline(always)] + pub unsafe fn $name(src: *const u8, dst: *mut u8) -> bool { + let simd = $load(src); + if !simd_is_ascii(simd) { + return false; + } + $store(dst, simd); + true + } + }; + } + + #[allow(unused_macros)] + macro_rules! ascii_to_ascii_simd_double_stride { ++ // Safety: store must be valid for 32 bytes of write, which may be unaligned (candidates: `store(8|16)_(aligned|unaligned)`) + ($name:ident, $store:ident) => { ++ /// Safety: src must be valid for 32 bytes of aligned u8x16 read ++ /// dst must be valid for 32 bytes of unaligned write according to ++ /// the $store fn, which may allow for unaligned writes or require ++ /// alignment to either 16x8 or u8x16. ++ /// ++ /// Safety-usable invariant: Returns Some(index) if the element at `index` is invalid ASCII + #[inline(always)] + pub unsafe fn $name(src: *const u8, dst: *mut u8) -> Option { + let first = load16_aligned(src); + let second = load16_aligned(src.add(SIMD_STRIDE_SIZE)); + $store(dst, first); + if unlikely(!simd_is_ascii(first | second)) { ++ // Safety: mask_ascii produces a mask of all the high bits. + let mask_first = mask_ascii(first); + if mask_first != 0 { ++ // Safety: on little endian systems this will be the number of ascii bytes ++ // before the first non-ascii, i.e. valid for indexing src ++ // TODO SAFETY: What about big-endian systems? + return Some(mask_first.trailing_zeros() as usize); + } + $store(dst.add(SIMD_STRIDE_SIZE), second); + let mask_second = mask_ascii(second); ++ // Safety: on little endian systems this will be the number of ascii bytes ++ // before the first non-ascii, i.e. valid for indexing src + return Some(SIMD_STRIDE_SIZE + mask_second.trailing_zeros() as usize); + } + $store(dst.add(SIMD_STRIDE_SIZE), second); + None + } + }; + } + + #[allow(unused_macros)] + macro_rules! ascii_to_basic_latin_simd_stride { ++ // Safety: load/store must be valid for 16 bytes of read/write, which may be unaligned. (candidates: `(load|store)(16|8)_(unaligned|aligned)` functions) + ($name:ident, $load:ident, $store:ident) => { ++ /// Safety: src and dst must be valid for 16/32 bytes of read/write according to ++ /// the $load/$store fn, which may allow for unaligned reads/writes or require ++ /// alignment to either 16x8 or u8x16. + #[inline(always)] + pub unsafe fn $name(src: *const u8, dst: *mut u16) -> bool { + let simd = $load(src); + if !simd_is_ascii(simd) { + return false; + } + let (first, second) = simd_unpack(simd); + $store(dst, first); + $store(dst.add(8), second); + true + } + }; + } + + #[allow(unused_macros)] + macro_rules! ascii_to_basic_latin_simd_double_stride { ++ // Safety: store must be valid for 16 bytes of write, which may be unaligned + ($name:ident, $store:ident) => { ++ /// Safety: src must be valid for 2*SIMD_STRIDE_SIZE bytes of aligned reads, ++ /// aligned to either 16x8 or u8x16. ++ /// dst must be valid for 2*SIMD_STRIDE_SIZE bytes of aligned or unaligned reads + #[inline(always)] + pub unsafe fn $name(src: *const u8, dst: *mut u16) -> Option { + let first = load16_aligned(src); + let second = load16_aligned(src.add(SIMD_STRIDE_SIZE)); + let (a, b) = simd_unpack(first); + $store(dst, a); ++ // Safety: divide by 2 since it's a u16 pointer + $store(dst.add(SIMD_STRIDE_SIZE / 2), b); + if unlikely(!simd_is_ascii(first | second)) { + let mask_first = mask_ascii(first); + if mask_first != 0 { + return Some(mask_first.trailing_zeros() as usize); + } + let (c, d) = simd_unpack(second); + $store(dst.add(SIMD_STRIDE_SIZE), c); +@@ -832,47 +1055,59 @@ macro_rules! ascii_to_basic_latin_simd_d + $store(dst.add(SIMD_STRIDE_SIZE + (SIMD_STRIDE_SIZE / 2)), d); + None + } + }; + } + + #[allow(unused_macros)] + macro_rules! unpack_simd_stride { ++ // Safety: load/store must be valid for 16 bytes of read/write, which may be unaligned. (candidates: `(load|store)(16|8)_(unaligned|aligned)` functions) + ($name:ident, $load:ident, $store:ident) => { ++ /// Safety: src and dst must be valid for 16 bytes of read/write according to ++ /// the $load/$store fn, which may allow for unaligned reads/writes or require ++ /// alignment to either 16x8 or u8x16. + #[inline(always)] + pub unsafe fn $name(src: *const u8, dst: *mut u16) { + let simd = $load(src); + let (first, second) = simd_unpack(simd); + $store(dst, first); + $store(dst.add(8), second); + } + }; + } + + #[allow(unused_macros)] + macro_rules! basic_latin_to_ascii_simd_stride { ++ // Safety: load/store must be valid for 16 bytes of read/write, which may be unaligned. (candidates: `(load|store)(16|8)_(unaligned|aligned)` functions) + ($name:ident, $load:ident, $store:ident) => { ++ /// Safety: src and dst must be valid for 32/16 bytes of read/write according to ++ /// the $load/$store fn, which may allow for unaligned reads/writes or require ++ /// alignment to either 16x8 or u8x16. + #[inline(always)] + pub unsafe fn $name(src: *const u16, dst: *mut u8) -> bool { + let first = $load(src); + let second = $load(src.add(8)); + if simd_is_basic_latin(first | second) { + $store(dst, simd_pack(first, second)); + true + } else { + false + } + } + }; + } + + #[allow(unused_macros)] + macro_rules! pack_simd_stride { ++ // Safety: load/store must be valid for 16 bytes of read/write, which may be unaligned. (candidates: `(load|store)(16|8)_(unaligned|aligned)` functions) + ($name:ident, $load:ident, $store:ident) => { ++ /// Safety: src and dst must be valid for 32/16 bytes of read/write according to ++ /// the $load/$store fn, which may allow for unaligned reads/writes or require ++ /// alignment to either 16x8 or u8x16. + #[inline(always)] + pub unsafe fn $name(src: *const u16, dst: *mut u8) { + let first = $load(src); + let second = $load(src.add(8)); + $store(dst, simd_pack(first, second)); + } + }; + } +@@ -888,24 +1123,28 @@ cfg_if! { + // pub const ALIGNMENT: usize = 8; + + pub const ALU_STRIDE_SIZE: usize = 16; + + pub const ALU_ALIGNMENT: usize = 8; + + pub const ALU_ALIGNMENT_MASK: usize = 7; + ++ // Safety for stride macros: We stick to the load8_aligned/etc family of functions. We consistently produce ++ // neither_unaligned variants using only unaligned inputs. + ascii_to_ascii_simd_stride!(ascii_to_ascii_stride_neither_aligned, load16_unaligned, store16_unaligned); + + ascii_to_basic_latin_simd_stride!(ascii_to_basic_latin_stride_neither_aligned, load16_unaligned, store8_unaligned); + unpack_simd_stride!(unpack_stride_neither_aligned, load16_unaligned, store8_unaligned); + + basic_latin_to_ascii_simd_stride!(basic_latin_to_ascii_stride_neither_aligned, load8_unaligned, store16_unaligned); + pack_simd_stride!(pack_stride_neither_aligned, load8_unaligned, store16_unaligned); + ++ // Safety for conversion macros: We use the unalign macro with unalign functions above. All stride functions were produced ++ // by stride macros that universally munch a single SIMD_STRIDE_SIZE worth of elements. + ascii_simd_unalign!(ascii_to_ascii, u8, u8, ascii_to_ascii_stride_neither_aligned); + ascii_simd_unalign!(ascii_to_basic_latin, u8, u16, ascii_to_basic_latin_stride_neither_aligned); + ascii_simd_unalign!(basic_latin_to_ascii, u16, u8, basic_latin_to_ascii_stride_neither_aligned); + latin1_simd_unalign!(unpack_latin1, u8, u16, unpack_stride_neither_aligned); + latin1_simd_unalign!(pack_latin1, u16, u8, pack_stride_neither_aligned); + } else if #[cfg(all(feature = "simd-accel", target_endian = "little", target_feature = "neon"))] { + // SIMD with different instructions for aligned and unaligned loads and stores. + // +@@ -914,16 +1153,19 @@ cfg_if! { + // but the benchmark results I see don't agree. + + pub const SIMD_STRIDE_SIZE: usize = 16; + + pub const MAX_STRIDE_SIZE: usize = 16; + + pub const SIMD_ALIGNMENT_MASK: usize = 15; + ++ // Safety for stride macros: We stick to the load8_aligned/etc family of functions. We consistently name ++ // aligned/unaligned functions according to src/dst being aligned/unaligned ++ + ascii_to_ascii_simd_stride!(ascii_to_ascii_stride_both_aligned, load16_aligned, store16_aligned); + ascii_to_ascii_simd_stride!(ascii_to_ascii_stride_src_aligned, load16_aligned, store16_unaligned); + ascii_to_ascii_simd_stride!(ascii_to_ascii_stride_dst_aligned, load16_unaligned, store16_aligned); + ascii_to_ascii_simd_stride!(ascii_to_ascii_stride_neither_aligned, load16_unaligned, store16_unaligned); + + ascii_to_basic_latin_simd_stride!(ascii_to_basic_latin_stride_both_aligned, load16_aligned, store8_aligned); + ascii_to_basic_latin_simd_stride!(ascii_to_basic_latin_stride_src_aligned, load16_aligned, store8_unaligned); + ascii_to_basic_latin_simd_stride!(ascii_to_basic_latin_stride_dst_aligned, load16_unaligned, store8_aligned); +@@ -939,36 +1181,43 @@ cfg_if! { + basic_latin_to_ascii_simd_stride!(basic_latin_to_ascii_stride_dst_aligned, load8_unaligned, store16_aligned); + basic_latin_to_ascii_simd_stride!(basic_latin_to_ascii_stride_neither_aligned, load8_unaligned, store16_unaligned); + + pack_simd_stride!(pack_stride_both_aligned, load8_aligned, store16_aligned); + pack_simd_stride!(pack_stride_src_aligned, load8_aligned, store16_unaligned); + pack_simd_stride!(pack_stride_dst_aligned, load8_unaligned, store16_aligned); + pack_simd_stride!(pack_stride_neither_aligned, load8_unaligned, store16_unaligned); + ++ // Safety for conversion macros: We use the correct pattern of both/src/dst/neither here. All stride functions were produced ++ // by stride macros that universally munch a single SIMD_STRIDE_SIZE worth of elements. ++ + ascii_simd_check_align!(ascii_to_ascii, u8, u8, ascii_to_ascii_stride_both_aligned, ascii_to_ascii_stride_src_aligned, ascii_to_ascii_stride_dst_aligned, ascii_to_ascii_stride_neither_aligned); + ascii_simd_check_align!(ascii_to_basic_latin, u8, u16, ascii_to_basic_latin_stride_both_aligned, ascii_to_basic_latin_stride_src_aligned, ascii_to_basic_latin_stride_dst_aligned, ascii_to_basic_latin_stride_neither_aligned); + ascii_simd_check_align!(basic_latin_to_ascii, u16, u8, basic_latin_to_ascii_stride_both_aligned, basic_latin_to_ascii_stride_src_aligned, basic_latin_to_ascii_stride_dst_aligned, basic_latin_to_ascii_stride_neither_aligned); + latin1_simd_check_align!(unpack_latin1, u8, u16, unpack_stride_both_aligned, unpack_stride_src_aligned, unpack_stride_dst_aligned, unpack_stride_neither_aligned); + latin1_simd_check_align!(pack_latin1, u16, u8, pack_stride_both_aligned, pack_stride_src_aligned, pack_stride_dst_aligned, pack_stride_neither_aligned); + } else if #[cfg(all(feature = "simd-accel", target_feature = "sse2"))] { + // SIMD with different instructions for aligned and unaligned loads and stores. + // + // Newer microarchitectures are not supposed to have a performance difference between + // aligned and unaligned SSE2 loads and stores when the address is actually aligned, + // but the benchmark results I see don't agree. + + pub const SIMD_STRIDE_SIZE: usize = 16; + ++ /// Safety-usable invariant: This should be identical to SIMD_STRIDE_SIZE (used by ascii_simd_check_align_unrolled) + pub const SIMD_ALIGNMENT: usize = 16; + + pub const MAX_STRIDE_SIZE: usize = 16; + + pub const SIMD_ALIGNMENT_MASK: usize = 15; + ++ // Safety for stride macros: We stick to the load8_aligned/etc family of functions. We consistently name ++ // aligned/unaligned functions according to src/dst being aligned/unaligned ++ + ascii_to_ascii_simd_double_stride!(ascii_to_ascii_simd_double_stride_both_aligned, store16_aligned); + ascii_to_ascii_simd_double_stride!(ascii_to_ascii_simd_double_stride_src_aligned, store16_unaligned); + + ascii_to_basic_latin_simd_double_stride!(ascii_to_basic_latin_simd_double_stride_both_aligned, store8_aligned); + ascii_to_basic_latin_simd_double_stride!(ascii_to_basic_latin_simd_double_stride_src_aligned, store8_unaligned); + + ascii_to_ascii_simd_stride!(ascii_to_ascii_stride_both_aligned, load16_aligned, store16_aligned); + ascii_to_ascii_simd_stride!(ascii_to_ascii_stride_src_aligned, load16_aligned, store16_unaligned); +@@ -984,33 +1233,43 @@ cfg_if! { + basic_latin_to_ascii_simd_stride!(basic_latin_to_ascii_stride_both_aligned, load8_aligned, store16_aligned); + basic_latin_to_ascii_simd_stride!(basic_latin_to_ascii_stride_src_aligned, load8_aligned, store16_unaligned); + basic_latin_to_ascii_simd_stride!(basic_latin_to_ascii_stride_dst_aligned, load8_unaligned, store16_aligned); + basic_latin_to_ascii_simd_stride!(basic_latin_to_ascii_stride_neither_aligned, load8_unaligned, store16_unaligned); + + pack_simd_stride!(pack_stride_both_aligned, load8_aligned, store16_aligned); + pack_simd_stride!(pack_stride_src_aligned, load8_aligned, store16_unaligned); + ++ // Safety for conversion macros: We use the correct pattern of both/src/dst/neither/double_both/double_src here. All stride functions were produced ++ // by stride macros that universally munch a single SIMD_STRIDE_SIZE worth of elements. ++ + ascii_simd_check_align_unrolled!(ascii_to_ascii, u8, u8, ascii_to_ascii_stride_both_aligned, ascii_to_ascii_stride_src_aligned, ascii_to_ascii_stride_neither_aligned, ascii_to_ascii_simd_double_stride_both_aligned, ascii_to_ascii_simd_double_stride_src_aligned); + ascii_simd_check_align_unrolled!(ascii_to_basic_latin, u8, u16, ascii_to_basic_latin_stride_both_aligned, ascii_to_basic_latin_stride_src_aligned, ascii_to_basic_latin_stride_neither_aligned, ascii_to_basic_latin_simd_double_stride_both_aligned, ascii_to_basic_latin_simd_double_stride_src_aligned); + + ascii_simd_check_align!(basic_latin_to_ascii, u16, u8, basic_latin_to_ascii_stride_both_aligned, basic_latin_to_ascii_stride_src_aligned, basic_latin_to_ascii_stride_dst_aligned, basic_latin_to_ascii_stride_neither_aligned); + latin1_simd_check_align_unrolled!(unpack_latin1, u8, u16, unpack_stride_both_aligned, unpack_stride_src_aligned, unpack_stride_dst_aligned, unpack_stride_neither_aligned); + latin1_simd_check_align_unrolled!(pack_latin1, u16, u8, pack_stride_both_aligned, pack_stride_src_aligned, pack_stride_dst_aligned, pack_stride_neither_aligned); + } else if #[cfg(all(target_endian = "little", target_pointer_width = "64"))] { + // Aligned ALU word, little-endian, 64-bit + ++ /// Safety invariant: this is the amount of bytes consumed by ++ /// unpack_alu. This will be twice the pointer width, as it consumes two usizes. ++ /// This is also the number of bytes produced by pack_alu. ++ /// This is also the number of u16 code units produced/consumed by unpack_alu/pack_alu respectively. + pub const ALU_STRIDE_SIZE: usize = 16; + + pub const MAX_STRIDE_SIZE: usize = 16; + ++ // Safety invariant: this is the pointer width in bytes + pub const ALU_ALIGNMENT: usize = 8; + ++ // Safety invariant: this is a mask for getting the bits of a pointer not aligned to ALU_ALIGNMENT + pub const ALU_ALIGNMENT_MASK: usize = 7; + ++ /// Safety: dst must point to valid space for writing four `usize`s + #[inline(always)] + unsafe fn unpack_alu(word: usize, second_word: usize, dst: *mut usize) { + let first = ((0x0000_0000_FF00_0000usize & word) << 24) | + ((0x0000_0000_00FF_0000usize & word) << 16) | + ((0x0000_0000_0000_FF00usize & word) << 8) | + (0x0000_0000_0000_00FFusize & word); + let second = ((0xFF00_0000_0000_0000usize & word) >> 8) | + ((0x00FF_0000_0000_0000usize & word) >> 16) | +@@ -1019,22 +1278,24 @@ cfg_if! { + let third = ((0x0000_0000_FF00_0000usize & second_word) << 24) | + ((0x0000_0000_00FF_0000usize & second_word) << 16) | + ((0x0000_0000_0000_FF00usize & second_word) << 8) | + (0x0000_0000_0000_00FFusize & second_word); + let fourth = ((0xFF00_0000_0000_0000usize & second_word) >> 8) | + ((0x00FF_0000_0000_0000usize & second_word) >> 16) | + ((0x0000_FF00_0000_0000usize & second_word) >> 24) | + ((0x0000_00FF_0000_0000usize & second_word) >> 32); ++ // Safety: fn invariant used here + *dst = first; + *(dst.add(1)) = second; + *(dst.add(2)) = third; + *(dst.add(3)) = fourth; + } + ++ /// Safety: dst must point to valid space for writing two `usize`s + #[inline(always)] + unsafe fn pack_alu(first: usize, second: usize, third: usize, fourth: usize, dst: *mut usize) { + let word = ((0x00FF_0000_0000_0000usize & second) << 8) | + ((0x0000_00FF_0000_0000usize & second) << 16) | + ((0x0000_0000_00FF_0000usize & second) << 24) | + ((0x0000_0000_0000_00FFusize & second) << 32) | + ((0x00FF_0000_0000_0000usize & first) >> 24) | + ((0x0000_00FF_0000_0000usize & first) >> 16) | +@@ -1043,70 +1304,88 @@ cfg_if! { + let second_word = ((0x00FF_0000_0000_0000usize & fourth) << 8) | + ((0x0000_00FF_0000_0000usize & fourth) << 16) | + ((0x0000_0000_00FF_0000usize & fourth) << 24) | + ((0x0000_0000_0000_00FFusize & fourth) << 32) | + ((0x00FF_0000_0000_0000usize & third) >> 24) | + ((0x0000_00FF_0000_0000usize & third) >> 16) | + ((0x0000_0000_00FF_0000usize & third) >> 8) | + (0x0000_0000_0000_00FFusize & third); ++ // Safety: fn invariant used here + *dst = word; + *(dst.add(1)) = second_word; + } + } else if #[cfg(all(target_endian = "little", target_pointer_width = "32"))] { + // Aligned ALU word, little-endian, 32-bit + ++ /// Safety invariant: this is the amount of bytes consumed by ++ /// unpack_alu. This will be twice the pointer width, as it consumes two usizes. ++ /// This is also the number of bytes produced by pack_alu. ++ /// This is also the number of u16 code units produced/consumed by unpack_alu/pack_alu respectively. + pub const ALU_STRIDE_SIZE: usize = 8; + + pub const MAX_STRIDE_SIZE: usize = 8; + ++ // Safety invariant: this is the pointer width in bytes + pub const ALU_ALIGNMENT: usize = 4; + ++ // Safety invariant: this is a mask for getting the bits of a pointer not aligned to ALU_ALIGNMENT + pub const ALU_ALIGNMENT_MASK: usize = 3; + ++ /// Safety: dst must point to valid space for writing four `usize`s + #[inline(always)] + unsafe fn unpack_alu(word: usize, second_word: usize, dst: *mut usize) { + let first = ((0x0000_FF00usize & word) << 8) | + (0x0000_00FFusize & word); + let second = ((0xFF00_0000usize & word) >> 8) | + ((0x00FF_0000usize & word) >> 16); + let third = ((0x0000_FF00usize & second_word) << 8) | + (0x0000_00FFusize & second_word); + let fourth = ((0xFF00_0000usize & second_word) >> 8) | + ((0x00FF_0000usize & second_word) >> 16); ++ // Safety: fn invariant used here + *dst = first; + *(dst.add(1)) = second; + *(dst.add(2)) = third; + *(dst.add(3)) = fourth; + } + ++ /// Safety: dst must point to valid space for writing two `usize`s + #[inline(always)] + unsafe fn pack_alu(first: usize, second: usize, third: usize, fourth: usize, dst: *mut usize) { + let word = ((0x00FF_0000usize & second) << 8) | + ((0x0000_00FFusize & second) << 16) | + ((0x00FF_0000usize & first) >> 8) | + (0x0000_00FFusize & first); + let second_word = ((0x00FF_0000usize & fourth) << 8) | + ((0x0000_00FFusize & fourth) << 16) | + ((0x00FF_0000usize & third) >> 8) | + (0x0000_00FFusize & third); ++ // Safety: fn invariant used here + *dst = word; + *(dst.add(1)) = second_word; + } + } else if #[cfg(all(target_endian = "big", target_pointer_width = "64"))] { + // Aligned ALU word, big-endian, 64-bit + ++ /// Safety invariant: this is the amount of bytes consumed by ++ /// unpack_alu. This will be twice the pointer width, as it consumes two usizes. ++ /// This is also the number of bytes produced by pack_alu. ++ /// This is also the number of u16 code units produced/consumed by unpack_alu/pack_alu respectively. + pub const ALU_STRIDE_SIZE: usize = 16; + + pub const MAX_STRIDE_SIZE: usize = 16; + ++ // Safety invariant: this is the pointer width in bytes + pub const ALU_ALIGNMENT: usize = 8; + ++ // Safety invariant: this is a mask for getting the bits of a pointer not aligned to ALU_ALIGNMENT + pub const ALU_ALIGNMENT_MASK: usize = 7; + ++ /// Safety: dst must point to valid space for writing four `usize`s + #[inline(always)] + unsafe fn unpack_alu(word: usize, second_word: usize, dst: *mut usize) { + let first = ((0xFF00_0000_0000_0000usize & word) >> 8) | + ((0x00FF_0000_0000_0000usize & word) >> 16) | + ((0x0000_FF00_0000_0000usize & word) >> 24) | + ((0x0000_00FF_0000_0000usize & word) >> 32); + let second = ((0x0000_0000_FF00_0000usize & word) << 24) | + ((0x0000_0000_00FF_0000usize & word) << 16) | +@@ -1115,22 +1394,24 @@ cfg_if! { + let third = ((0xFF00_0000_0000_0000usize & second_word) >> 8) | + ((0x00FF_0000_0000_0000usize & second_word) >> 16) | + ((0x0000_FF00_0000_0000usize & second_word) >> 24) | + ((0x0000_00FF_0000_0000usize & second_word) >> 32); + let fourth = ((0x0000_0000_FF00_0000usize & second_word) << 24) | + ((0x0000_0000_00FF_0000usize & second_word) << 16) | + ((0x0000_0000_0000_FF00usize & second_word) << 8) | + (0x0000_0000_0000_00FFusize & second_word); ++ // Safety: fn invariant used here + *dst = first; + *(dst.add(1)) = second; + *(dst.add(2)) = third; + *(dst.add(3)) = fourth; + } + ++ /// Safety: dst must point to valid space for writing two `usize`s + #[inline(always)] + unsafe fn pack_alu(first: usize, second: usize, third: usize, fourth: usize, dst: *mut usize) { + let word = ((0x00FF0000_00000000usize & first) << 8) | + ((0x000000FF_00000000usize & first) << 16) | + ((0x00000000_00FF0000usize & first) << 24) | + ((0x00000000_000000FFusize & first) << 32) | + ((0x00FF0000_00000000usize & second) >> 24) | + ((0x000000FF_00000000usize & second) >> 16) | +@@ -1139,67 +1420,80 @@ cfg_if! { + let second_word = ((0x00FF0000_00000000usize & third) << 8) | + ((0x000000FF_00000000usize & third) << 16) | + ((0x00000000_00FF0000usize & third) << 24) | + ((0x00000000_000000FFusize & third) << 32) | + ((0x00FF0000_00000000usize & fourth) >> 24) | + ((0x000000FF_00000000usize & fourth) >> 16) | + ((0x00000000_00FF0000usize & fourth) >> 8) | + (0x00000000_000000FFusize & fourth); ++ // Safety: fn invariant used here + *dst = word; + *(dst.add(1)) = second_word; + } + } else if #[cfg(all(target_endian = "big", target_pointer_width = "32"))] { + // Aligned ALU word, big-endian, 32-bit + ++ /// Safety invariant: this is the amount of bytes consumed by ++ /// unpack_alu. This will be twice the pointer width, as it consumes two usizes. ++ /// This is also the number of bytes produced by pack_alu. ++ /// This is also the number of u16 code units produced/consumed by unpack_alu/pack_alu respectively. + pub const ALU_STRIDE_SIZE: usize = 8; + + pub const MAX_STRIDE_SIZE: usize = 8; + ++ // Safety invariant: this is the pointer width in bytes + pub const ALU_ALIGNMENT: usize = 4; + ++ // Safety invariant: this is a mask for getting the bits of a pointer not aligned to ALU_ALIGNMENT + pub const ALU_ALIGNMENT_MASK: usize = 3; + ++ /// Safety: dst must point to valid space for writing four `usize`s + #[inline(always)] + unsafe fn unpack_alu(word: usize, second_word: usize, dst: *mut usize) { + let first = ((0xFF00_0000usize & word) >> 8) | + ((0x00FF_0000usize & word) >> 16); + let second = ((0x0000_FF00usize & word) << 8) | + (0x0000_00FFusize & word); + let third = ((0xFF00_0000usize & second_word) >> 8) | + ((0x00FF_0000usize & second_word) >> 16); + let fourth = ((0x0000_FF00usize & second_word) << 8) | + (0x0000_00FFusize & second_word); ++ // Safety: fn invariant used here + *dst = first; + *(dst.add(1)) = second; + *(dst.add(2)) = third; + *(dst.add(3)) = fourth; + } + ++ /// Safety: dst must point to valid space for writing two `usize`s + #[inline(always)] + unsafe fn pack_alu(first: usize, second: usize, third: usize, fourth: usize, dst: *mut usize) { + let word = ((0x00FF_0000usize & first) << 8) | + ((0x0000_00FFusize & first) << 16) | + ((0x00FF_0000usize & second) >> 8) | + (0x0000_00FFusize & second); + let second_word = ((0x00FF_0000usize & third) << 8) | + ((0x0000_00FFusize & third) << 16) | + ((0x00FF_0000usize & fourth) >> 8) | + (0x0000_00FFusize & fourth); ++ // Safety: fn invariant used here + *dst = word; + *(dst.add(1)) = second_word; + } + } else { + ascii_naive!(ascii_to_ascii, u8, u8); + ascii_naive!(ascii_to_basic_latin, u8, u16); + ascii_naive!(basic_latin_to_ascii, u16, u8); + } + } + + cfg_if! { ++ // Safety-usable invariant: this counts the zeroes from the "first byte" of utf-8 data packed into a usize ++ // with the target endianness + if #[cfg(target_endian = "little")] { + #[allow(dead_code)] + #[inline(always)] + fn count_zeros(word: usize) -> u32 { + word.trailing_zeros() + } + } else { + #[allow(dead_code)] +@@ -1207,208 +1501,272 @@ cfg_if! { + fn count_zeros(word: usize) -> u32 { + word.leading_zeros() + } + } + } + + cfg_if! { + if #[cfg(all(feature = "simd-accel", target_endian = "little", target_arch = "disabled"))] { ++ /// Safety-usable invariant: Will return the value and position of the first non-ASCII byte in the slice in a Some if found. ++ /// In other words, the first element of the Some is always `> 127` + #[inline(always)] + pub fn validate_ascii(slice: &[u8]) -> Option<(u8, usize)> { + let src = slice.as_ptr(); + let len = slice.len(); + let mut offset = 0usize; ++ // Safety: if this check succeeds we're valid for reading/writing at least `stride` elements. + if SIMD_STRIDE_SIZE <= len { + let len_minus_stride = len - SIMD_STRIDE_SIZE; + loop { ++ // Safety: src at offset is valid for a `SIMD_STRIDE_SIZE` read + let simd = unsafe { load16_unaligned(src.add(offset)) }; + if !simd_is_ascii(simd) { + break; + } + offset += SIMD_STRIDE_SIZE; ++ // This is `offset > len - SIMD_STRIDE_SIZE` which means we always have at least `SIMD_STRIDE_SIZE` elements to munch next time. + if offset > len_minus_stride { + break; + } + } + } + while offset < len { + let code_unit = slice[offset]; + if code_unit > 127 { ++ // Safety: Safety-usable invariant upheld here + return Some((code_unit, offset)); + } + offset += 1; + } + None + } + } else if #[cfg(all(feature = "simd-accel", target_feature = "sse2"))] { ++ /// Safety-usable invariant: will return Some() when it encounters non-ASCII, with the first element in the Some being ++ /// guaranteed to be non-ASCII (> 127), and the second being the offset where it is found + #[inline(always)] + pub fn validate_ascii(slice: &[u8]) -> Option<(u8, usize)> { + let src = slice.as_ptr(); + let len = slice.len(); + let mut offset = 0usize; ++ // Safety: if this check succeeds we're valid for reading at least `stride` elements. + if SIMD_STRIDE_SIZE <= len { + // First, process one unaligned vector ++ // Safety: src is valid for a `SIMD_STRIDE_SIZE` read + let simd = unsafe { load16_unaligned(src) }; + let mask = mask_ascii(simd); + if mask != 0 { + offset = mask.trailing_zeros() as usize; + let non_ascii = unsafe { *src.add(offset) }; + return Some((non_ascii, offset)); + } + offset = SIMD_STRIDE_SIZE; ++ // Safety: Now that offset has changed we don't yet know how much it is valid for + + // We have now seen 16 ASCII bytes. Let's guess that + // there will be enough more to justify more expense + // in the case of non-ASCII. + // Use aligned reads for the sake of old microachitectures. ++ // Safety: this correctly calculates the number of src_units that need to be read before the remaining list is aligned. ++ // This is by definition less than SIMD_ALIGNMENT, which is defined to be equal to SIMD_STRIDE_SIZE. + let until_alignment = unsafe { (SIMD_ALIGNMENT - ((src.add(offset) as usize) & SIMD_ALIGNMENT_MASK)) & SIMD_ALIGNMENT_MASK }; + // This addition won't overflow, because even in the 32-bit PAE case the + // address space holds enough code that the slice length can't be that + // close to address space size. + // offset now equals SIMD_STRIDE_SIZE, hence times 3 below. ++ // ++ // Safety: if this check succeeds we're valid for reading at least `2 * SIMD_STRIDE_SIZE` elements plus `until_alignment`. ++ // The extra SIMD_STRIDE_SIZE in the condition is because `offset` is already `SIMD_STRIDE_SIZE`. + if until_alignment + (SIMD_STRIDE_SIZE * 3) <= len { + if until_alignment != 0 { ++ // Safety: this is safe to call since we're valid for this read (and more), and don't care about alignment ++ // This will copy over bytes that get decoded twice since it's not incrementing `offset` by SIMD_STRIDE_SIZE. This is fine. + let simd = unsafe { load16_unaligned(src.add(offset)) }; + let mask = mask_ascii(simd); + if mask != 0 { + offset += mask.trailing_zeros() as usize; + let non_ascii = unsafe { *src.add(offset) }; + return Some((non_ascii, offset)); + } + offset += until_alignment; + } ++ // Safety: At this point we're valid for reading 2*SIMD_STRIDE_SIZE elements ++ // Safety: Now `offset` is aligned for `src` + let len_minus_stride_times_two = len - (SIMD_STRIDE_SIZE * 2); + loop { ++ // Safety: We were valid for this read, and were aligned. + let first = unsafe { load16_aligned(src.add(offset)) }; + let second = unsafe { load16_aligned(src.add(offset + SIMD_STRIDE_SIZE)) }; + if !simd_is_ascii(first | second) { ++ // Safety: mask_ascii produces a mask of all the high bits. + let mask_first = mask_ascii(first); + if mask_first != 0 { ++ // Safety: on little endian systems this will be the number of ascii bytes ++ // before the first non-ascii, i.e. valid for indexing src ++ // TODO SAFETY: What about big-endian systems? + offset += mask_first.trailing_zeros() as usize; + } else { + let mask_second = mask_ascii(second); ++ // Safety: on little endian systems this will be the number of ascii bytes ++ // before the first non-ascii, i.e. valid for indexing src + offset += SIMD_STRIDE_SIZE + mask_second.trailing_zeros() as usize; + } ++ // Safety: We know this is non-ASCII, and can uphold the safety-usable invariant here + let non_ascii = unsafe { *src.add(offset) }; ++ + return Some((non_ascii, offset)); + } + offset += SIMD_STRIDE_SIZE * 2; ++ // Safety: This is `offset > len - 2 * SIMD_STRIDE_SIZE` which means we always have at least `2 * SIMD_STRIDE_SIZE` elements to munch next time. + if offset > len_minus_stride_times_two { + break; + } + } ++ // Safety: if this check succeeds we're valid for reading at least `SIMD_STRIDE_SIZE` + if offset + SIMD_STRIDE_SIZE <= len { +- let simd = unsafe { load16_aligned(src.add(offset)) }; +- let mask = mask_ascii(simd); ++ // Safety: We were valid for this read, and were aligned. ++ let simd = unsafe { load16_aligned(src.add(offset)) }; ++ // Safety: mask_ascii produces a mask of all the high bits. ++ let mask = mask_ascii(simd); + if mask != 0 { ++ // Safety: on little endian systems this will be the number of ascii bytes ++ // before the first non-ascii, i.e. valid for indexing src + offset += mask.trailing_zeros() as usize; + let non_ascii = unsafe { *src.add(offset) }; ++ // Safety: We know this is non-ASCII, and can uphold the safety-usable invariant here + return Some((non_ascii, offset)); + } + offset += SIMD_STRIDE_SIZE; + } + } else { ++ // Safety: this is the unaligned branch + // At most two iterations, so unroll ++ // Safety: if this check succeeds we're valid for reading at least `SIMD_STRIDE_SIZE` + if offset + SIMD_STRIDE_SIZE <= len { ++ // Safety: We're valid for this read but must use an unaligned read + let simd = unsafe { load16_unaligned(src.add(offset)) }; + let mask = mask_ascii(simd); + if mask != 0 { + offset += mask.trailing_zeros() as usize; + let non_ascii = unsafe { *src.add(offset) }; ++ // Safety-usable invariant upheld here (same as above) + return Some((non_ascii, offset)); + } + offset += SIMD_STRIDE_SIZE; ++ // Safety: if this check succeeds we're valid for reading at least `SIMD_STRIDE_SIZE` + if offset + SIMD_STRIDE_SIZE <= len { ++ // Safety: We're valid for this read but must use an unaligned read + let simd = unsafe { load16_unaligned(src.add(offset)) }; + let mask = mask_ascii(simd); + if mask != 0 { + offset += mask.trailing_zeros() as usize; + let non_ascii = unsafe { *src.add(offset) }; ++ // Safety-usable invariant upheld here (same as above) + return Some((non_ascii, offset)); + } + offset += SIMD_STRIDE_SIZE; + } + } + } + } + while offset < len { ++ // Safety: relies straightforwardly on the `len` invariant + let code_unit = unsafe { *(src.add(offset)) }; + if code_unit > 127 { ++ // Safety-usable invariant upheld here + return Some((code_unit, offset)); + } + offset += 1; + } + None + } + } else { ++ // Safety-usable invariant: returns byte index of first non-ascii byte + #[inline(always)] + fn find_non_ascii(word: usize, second_word: usize) -> Option { + let word_masked = word & ASCII_MASK; + let second_masked = second_word & ASCII_MASK; + if (word_masked | second_masked) == 0 { ++ // Both are ascii, invariant upheld + return None; + } + if word_masked != 0 { + let zeros = count_zeros(word_masked); +- // `zeros` now contains 7 (for the seven bits of non-ASCII) ++ // `zeros` now contains 0 to 7 (for the seven bits of masked ASCII in little endian, ++ // or up to 7 bits of non-ASCII in big endian if the first byte is non-ASCII) + // plus 8 times the number of ASCII in text order before the + // non-ASCII byte in the little-endian case or 8 times the number of ASCII in + // text order before the non-ASCII byte in the big-endian case. + let num_ascii = (zeros >> 3) as usize; ++ // Safety-usable invariant upheld here + return Some(num_ascii); + } + let zeros = count_zeros(second_masked); +- // `zeros` now contains 7 (for the seven bits of non-ASCII) ++ // `zeros` now contains 0 to 7 (for the seven bits of masked ASCII in little endian, ++ // or up to 7 bits of non-ASCII in big endian if the first byte is non-ASCII) + // plus 8 times the number of ASCII in text order before the + // non-ASCII byte in the little-endian case or 8 times the number of ASCII in + // text order before the non-ASCII byte in the big-endian case. + let num_ascii = (zeros >> 3) as usize; ++ // Safety-usable invariant upheld here + Some(ALU_ALIGNMENT + num_ascii) + } + ++ /// Safety: `src` must be valid for the reads of two `usize`s ++ /// ++ /// Safety-usable invariant: will return byte index of first non-ascii byte + #[inline(always)] + unsafe fn validate_ascii_stride(src: *const usize) -> Option { + let word = *src; + let second_word = *(src.add(1)); + find_non_ascii(word, second_word) + } + ++ /// Safety-usable invariant: will return Some() when it encounters non-ASCII, with the first element in the Some being ++ /// guaranteed to be non-ASCII (> 127), and the second being the offset where it is found + #[cfg_attr(feature = "cargo-clippy", allow(cast_ptr_alignment))] + #[inline(always)] + pub fn validate_ascii(slice: &[u8]) -> Option<(u8, usize)> { + let src = slice.as_ptr(); + let len = slice.len(); + let mut offset = 0usize; + let mut until_alignment = (ALU_ALIGNMENT - ((src as usize) & ALU_ALIGNMENT_MASK)) & ALU_ALIGNMENT_MASK; ++ // Safety: If this check fails we're valid to read `until_alignment + ALU_STRIDE_SIZE` elements + if until_alignment + ALU_STRIDE_SIZE <= len { + while until_alignment != 0 { + let code_unit = slice[offset]; + if code_unit > 127 { ++ // Safety-usable invairant upheld here + return Some((code_unit, offset)); + } + offset += 1; + until_alignment -= 1; + } ++ // Safety: At this point we have read until_alignment elements and ++ // are valid for `ALU_STRIDE_SIZE` more. + let len_minus_stride = len - ALU_STRIDE_SIZE; + loop { ++ // Safety: we were valid for this read + let ptr = unsafe { src.add(offset) as *const usize }; + if let Some(num_ascii) = unsafe { validate_ascii_stride(ptr) } { + offset += num_ascii; ++ // Safety-usable invairant upheld here using the invariant from validate_ascii_stride() + return Some((unsafe { *(src.add(offset)) }, offset)); + } + offset += ALU_STRIDE_SIZE; ++ // Safety: This is `offset > ALU_STRIDE_SIZE` which means we always have at least `2 * ALU_STRIDE_SIZE` elements to munch next time. + if offset > len_minus_stride { + break; + } + } + } + while offset < len { + let code_unit = slice[offset]; + if code_unit > 127 { ++ // Safety-usable invairant upheld here + return Some((code_unit, offset)); + } + offset += 1; + } + None + } + + } +@@ -1423,70 +1781,88 @@ cfg_if! { + // vector reads without vector writes. + + pub const ALU_STRIDE_SIZE: usize = 8; + + pub const ALU_ALIGNMENT: usize = 4; + + pub const ALU_ALIGNMENT_MASK: usize = 3; + } else { ++ // Safety: src points to two valid `usize`s, dst points to four valid `usize`s + #[inline(always)] + unsafe fn unpack_latin1_stride_alu(src: *const usize, dst: *mut usize) { ++ // Safety: src safety invariant used here + let word = *src; + let second_word = *(src.add(1)); ++ // Safety: dst safety invariant passed down + unpack_alu(word, second_word, dst); + } + ++ // Safety: src points to four valid `usize`s, dst points to two valid `usize`s + #[inline(always)] + unsafe fn pack_latin1_stride_alu(src: *const usize, dst: *mut usize) { ++ // Safety: src safety invariant used here + let first = *src; + let second = *(src.add(1)); + let third = *(src.add(2)); + let fourth = *(src.add(3)); ++ // Safety: dst safety invariant passed down + pack_alu(first, second, third, fourth, dst); + } + ++ // Safety: src points to two valid `usize`s, dst points to four valid `usize`s + #[inline(always)] + unsafe fn ascii_to_basic_latin_stride_alu(src: *const usize, dst: *mut usize) -> bool { ++ // Safety: src safety invariant used here + let word = *src; + let second_word = *(src.add(1)); + // Check if the words contains non-ASCII + if (word & ASCII_MASK) | (second_word & ASCII_MASK) != 0 { + return false; + } ++ // Safety: dst safety invariant passed down + unpack_alu(word, second_word, dst); + true + } + ++ // Safety: src points four valid `usize`s, dst points to two valid `usize`s + #[inline(always)] + unsafe fn basic_latin_to_ascii_stride_alu(src: *const usize, dst: *mut usize) -> bool { ++ // Safety: src safety invariant used here + let first = *src; + let second = *(src.add(1)); + let third = *(src.add(2)); + let fourth = *(src.add(3)); + if (first & BASIC_LATIN_MASK) | (second & BASIC_LATIN_MASK) | (third & BASIC_LATIN_MASK) | (fourth & BASIC_LATIN_MASK) != 0 { + return false; + } ++ // Safety: dst safety invariant passed down + pack_alu(first, second, third, fourth, dst); + true + } + ++ // Safety: src, dst both point to two valid `usize`s each ++ // Safety-usable invariant: Will return byte index of first non-ascii byte. + #[inline(always)] + unsafe fn ascii_to_ascii_stride(src: *const usize, dst: *mut usize) -> Option { ++ // Safety: src safety invariant used here + let word = *src; + let second_word = *(src.add(1)); ++ // Safety: src safety invariant used here + *dst = word; + *(dst.add(1)) = second_word; ++ // Relies on safety-usable invariant here + find_non_ascii(word, second_word) + } + + basic_latin_alu!(ascii_to_basic_latin, u8, u16, ascii_to_basic_latin_stride_alu); + basic_latin_alu!(basic_latin_to_ascii, u16, u8, basic_latin_to_ascii_stride_alu); + latin1_alu!(unpack_latin1, u8, u16, unpack_latin1_stride_alu); + latin1_alu!(pack_latin1, u16, u8, pack_latin1_stride_alu); ++ // Safety invariant upheld: ascii_to_ascii_stride will return byte index of first non-ascii if found + ascii_alu!(ascii_to_ascii, u8, u8, ascii_to_ascii_stride); + } + } + + pub fn ascii_valid_up_to(bytes: &[u8]) -> usize { + match validate_ascii(bytes) { + None => bytes.len(), + Some((_, num_valid)) => num_valid, +diff --git a/third_party/rust/encoding_rs/src/handles.rs b/third_party/rust/encoding_rs/src/handles.rs +--- a/third_party/rust/encoding_rs/src/handles.rs ++++ b/third_party/rust/encoding_rs/src/handles.rs +@@ -29,17 +29,17 @@ use crate::simd_funcs::*; + #[cfg(all( + feature = "simd-accel", + any( + target_feature = "sse2", + all(target_endian = "little", target_arch = "aarch64"), + all(target_endian = "little", target_feature = "neon") + ) + ))] +-use packed_simd::u16x8; ++use core::simd::u16x8; + + use super::DecoderResult; + use super::EncoderResult; + use crate::ascii::*; + use crate::utf_8::convert_utf8_to_utf16_up_to_invalid; + use crate::utf_8::utf8_valid_up_to; + + pub enum Space { +@@ -85,84 +85,100 @@ impl Endian for LittleEndian { + const OPPOSITE_ENDIAN: bool = false; + + #[cfg(target_endian = "big")] + const OPPOSITE_ENDIAN: bool = true; + } + + #[derive(Debug, Copy, Clone)] + struct UnalignedU16Slice { ++ // Safety invariant: ptr must be valid for reading 2*len bytes + ptr: *const u8, + len: usize, + } + + impl UnalignedU16Slice { ++ /// Safety: ptr must be valid for reading 2*len bytes + #[inline(always)] + pub unsafe fn new(ptr: *const u8, len: usize) -> UnalignedU16Slice { ++ // Safety: field invariant passed up to caller here + UnalignedU16Slice { ptr, len } + } + + #[inline(always)] + pub fn trim_last(&mut self) { + assert!(self.len > 0); ++ // Safety: invariant upheld here: a slice is still valid with a shorter len + self.len -= 1; + } + + #[inline(always)] + pub fn at(&self, i: usize) -> u16 { + use core::mem::MaybeUninit; + + assert!(i < self.len); + unsafe { + let mut u: MaybeUninit = MaybeUninit::uninit(); ++ // Safety: i is at most len - 1, which works here + ::core::ptr::copy_nonoverlapping(self.ptr.add(i * 2), u.as_mut_ptr() as *mut u8, 2); ++ // Safety: valid read above lets us do this + u.assume_init() + } + } + + #[cfg(feature = "simd-accel")] + #[inline(always)] + pub fn simd_at(&self, i: usize) -> u16x8 { ++ // Safety: i/len are on the scale of u16s, each one corresponds to 2 u8s + assert!(i + SIMD_STRIDE_SIZE / 2 <= self.len); + let byte_index = i * 2; ++ // Safety: load16_unaligned needs SIMD_STRIDE_SIZE=16 u8 elements to read, ++ // or 16/2 = 8 u16 elements to read. ++ // We have checked that we have at least that many above. ++ + unsafe { to_u16_lanes(load16_unaligned(self.ptr.add(byte_index))) } + } + + #[inline(always)] + pub fn len(&self) -> usize { + self.len + } + + #[inline(always)] + pub fn tail(&self, from: usize) -> UnalignedU16Slice { + // XXX the return value should be restricted not to + // outlive self. + assert!(from <= self.len); ++ // Safety: This upholds the same invariant: `from` is in bounds and we're returning a shorter slice + unsafe { UnalignedU16Slice::new(self.ptr.add(from * 2), self.len - from) } + } + + #[cfg(feature = "simd-accel")] + #[inline(always)] + pub fn copy_bmp_to(&self, other: &mut [u16]) -> Option<(u16, usize)> { + assert!(self.len <= other.len()); + let mut offset = 0; ++ // Safety: SIMD_STRIDE_SIZE is measured in bytes, whereas len is in u16s. We check we can ++ // munch SIMD_STRIDE_SIZE / 2 u16s which means we can write SIMD_STRIDE_SIZE u8s + if SIMD_STRIDE_SIZE / 2 <= self.len { + let len_minus_stride = self.len - SIMD_STRIDE_SIZE / 2; + loop { + let mut simd = self.simd_at(offset); + if E::OPPOSITE_ENDIAN { + simd = simd_byte_swap(simd); + } ++ // Safety: we have enough space on the other side to write this + unsafe { + store8_unaligned(other.as_mut_ptr().add(offset), simd); + } + if contains_surrogates(simd) { + break; + } + offset += SIMD_STRIDE_SIZE / 2; ++ // Safety: This ensures we still have space for writing SIMD_STRIDE_SIZE u8s + if offset > len_minus_stride { + break; + } + } + } + while offset < self.len { + let unit = swap_if_opposite_endian::(self.at(offset)); + other[offset] = unit; +@@ -231,33 +247,37 @@ fn copy_unaligned_basic_latin_to_ascii( + src: UnalignedU16Slice, + dst: &mut [u8], + ) -> CopyAsciiResult { + let len = ::core::cmp::min(src.len(), dst.len()); + let mut offset = 0; ++ // Safety: This check ensures we are able to read/write at least SIMD_STRIDE_SIZE elements + if SIMD_STRIDE_SIZE <= len { + let len_minus_stride = len - SIMD_STRIDE_SIZE; + loop { + let mut first = src.simd_at(offset); + let mut second = src.simd_at(offset + (SIMD_STRIDE_SIZE / 2)); + if E::OPPOSITE_ENDIAN { + first = simd_byte_swap(first); + second = simd_byte_swap(second); + } + if !simd_is_basic_latin(first | second) { + break; + } + let packed = simd_pack(first, second); ++ // Safety: We are able to write SIMD_STRIDE_SIZE elements in this iteration + unsafe { + store16_unaligned(dst.as_mut_ptr().add(offset), packed); + } + offset += SIMD_STRIDE_SIZE; ++ // Safety: This is `offset > len - SIMD_STRIDE_SIZE`, which ensures that we can write at least SIMD_STRIDE_SIZE elements ++ // in the next iteration + if offset > len_minus_stride { + break; + } + } + } + copy_unaligned_basic_latin_to_ascii_alu::(src.tail(offset), &mut dst[offset..], offset) + } + +@@ -632,94 +652,106 @@ impl<'a> Utf16Destination<'a> { + #[inline(always)] + fn write_astral(&mut self, astral: u32) { + debug_assert!(astral > 0xFFFF); + debug_assert!(astral <= 0x10_FFFF); + self.write_code_unit((0xD7C0 + (astral >> 10)) as u16); + self.write_code_unit((0xDC00 + (astral & 0x3FF)) as u16); + } + #[inline(always)] +- pub fn write_surrogate_pair(&mut self, high: u16, low: u16) { ++ fn write_surrogate_pair(&mut self, high: u16, low: u16) { + self.write_code_unit(high); + self.write_code_unit(low); + } + #[inline(always)] + fn write_big5_combination(&mut self, combined: u16, combining: u16) { + self.write_bmp_excl_ascii(combined); + self.write_bmp_excl_ascii(combining); + } ++ // Safety-usable invariant: CopyAsciiResult::GoOn will only contain bytes >=0x80 + #[inline(always)] + pub fn copy_ascii_from_check_space_bmp<'b>( + &'b mut self, + source: &mut ByteSource, + ) -> CopyAsciiResult<(DecoderResult, usize, usize), (u8, Utf16BmpHandle<'b, 'a>)> { + let non_ascii_ret = { + let src_remaining = &source.slice[source.pos..]; + let dst_remaining = &mut self.slice[self.pos..]; + let (pending, length) = if dst_remaining.len() < src_remaining.len() { + (DecoderResult::OutputFull, dst_remaining.len()) + } else { + (DecoderResult::InputEmpty, src_remaining.len()) + }; ++ // Safety: This function is documented as needing valid pointers for src/dest and len, which ++ // is true since we've passed the minumum length of the two + match unsafe { + ascii_to_basic_latin(src_remaining.as_ptr(), dst_remaining.as_mut_ptr(), length) + } { + None => { + source.pos += length; + self.pos += length; + return CopyAsciiResult::Stop((pending, source.pos, self.pos)); + } ++ // Safety: the function is documented as returning bytes >=0x80 in the Some + Some((non_ascii, consumed)) => { + source.pos += consumed; + self.pos += consumed; + source.pos += 1; // +1 for non_ascii ++ // Safety: non-ascii bubbled out here + non_ascii + } + } + }; ++ // Safety: non-ascii returned here + CopyAsciiResult::GoOn((non_ascii_ret, Utf16BmpHandle::new(self))) + } ++ // Safety-usable invariant: CopyAsciiResult::GoOn will only contain bytes >=0x80 + #[inline(always)] + pub fn copy_ascii_from_check_space_astral<'b>( + &'b mut self, + source: &mut ByteSource, + ) -> CopyAsciiResult<(DecoderResult, usize, usize), (u8, Utf16AstralHandle<'b, 'a>)> { + let non_ascii_ret = { + let dst_len = self.slice.len(); + let src_remaining = &source.slice[source.pos..]; + let dst_remaining = &mut self.slice[self.pos..]; + let (pending, length) = if dst_remaining.len() < src_remaining.len() { + (DecoderResult::OutputFull, dst_remaining.len()) + } else { + (DecoderResult::InputEmpty, src_remaining.len()) + }; ++ // Safety: This function is documented as needing valid pointers for src/dest and len, which ++ // is true since we've passed the minumum length of the two + match unsafe { + ascii_to_basic_latin(src_remaining.as_ptr(), dst_remaining.as_mut_ptr(), length) + } { + None => { + source.pos += length; + self.pos += length; + return CopyAsciiResult::Stop((pending, source.pos, self.pos)); + } ++ // Safety: the function is documented as returning bytes >=0x80 in the Some + Some((non_ascii, consumed)) => { + source.pos += consumed; + self.pos += consumed; + if self.pos + 1 < dst_len { + source.pos += 1; // +1 for non_ascii ++ // Safety: non-ascii bubbled out here + non_ascii + } else { + return CopyAsciiResult::Stop(( + DecoderResult::OutputFull, + source.pos, + self.pos, + )); + } + } + } + }; ++ // Safety: non-ascii returned here + CopyAsciiResult::GoOn((non_ascii_ret, Utf16AstralHandle::new(self))) + } + #[inline(always)] + pub fn copy_utf8_up_to_invalid_from(&mut self, source: &mut ByteSource) { + let src_remaining = &source.slice[source.pos..]; + let dst_remaining = &mut self.slice[self.pos..]; + let (read, written) = convert_utf8_to_utf16_up_to_invalid(src_remaining, dst_remaining); + source.pos += read; +diff --git a/third_party/rust/encoding_rs/src/lib.rs b/third_party/rust/encoding_rs/src/lib.rs +--- a/third_party/rust/encoding_rs/src/lib.rs ++++ b/third_party/rust/encoding_rs/src/lib.rs +@@ -684,37 +684,26 @@ + //! TIS-620windows-874 + //! + //! + //! + //! See the section [_UTF-16LE, UTF-16BE and Unicode Encoding Schemes_](#utf-16le-utf-16be-and-unicode-encoding-schemes) + //! for discussion about the UTF-16 family. + + #![no_std] +-#![cfg_attr(feature = "simd-accel", feature(core_intrinsics))] ++#![cfg_attr(feature = "simd-accel", feature(core_intrinsics, portable_simd))] + + #[cfg(feature = "alloc")] + #[cfg_attr(test, macro_use)] + extern crate alloc; + + extern crate core; + #[macro_use] + extern crate cfg_if; + +-#[cfg(all( +- feature = "simd-accel", +- any( +- target_feature = "sse2", +- all(target_endian = "little", target_arch = "aarch64"), +- all(target_endian = "little", target_feature = "neon") +- ) +-))] +-#[macro_use(shuffle)] +-extern crate packed_simd; +- + #[cfg(feature = "serde")] + extern crate serde; + + #[cfg(all(test, feature = "serde"))] + extern crate bincode; + #[cfg(all(test, feature = "serde"))] + #[macro_use] + extern crate serde_derive; +diff --git a/third_party/rust/encoding_rs/src/mem.rs b/third_party/rust/encoding_rs/src/mem.rs +--- a/third_party/rust/encoding_rs/src/mem.rs ++++ b/third_party/rust/encoding_rs/src/mem.rs +@@ -111,16 +111,21 @@ macro_rules! by_unit_check_alu { + until_alignment -= 1; + } + if accu >= $bound { + return false; + } + } + let len_minus_stride = len - ALU_ALIGNMENT / unit_size; + if offset + (4 * (ALU_ALIGNMENT / unit_size)) <= len { ++ // Safety: the above check lets us perform 4 consecutive reads of ++ // length ALU_ALIGNMENT / unit_size. ALU_ALIGNMENT is the size of usize, and unit_size ++ // is the size of the `src` pointer, so this is equal to performing four usize reads. ++ // ++ // This invariant is upheld on all loop iterations + let len_minus_unroll = len - (4 * (ALU_ALIGNMENT / unit_size)); + loop { + let unroll_accu = unsafe { *(src.add(offset) as *const usize) } + | unsafe { + *(src.add(offset + (ALU_ALIGNMENT / unit_size)) as *const usize) + } + | unsafe { + *(src.add(offset + (2 * (ALU_ALIGNMENT / unit_size))) +@@ -129,22 +134,24 @@ macro_rules! by_unit_check_alu { + | unsafe { + *(src.add(offset + (3 * (ALU_ALIGNMENT / unit_size))) + as *const usize) + }; + if unroll_accu & $mask != 0 { + return false; + } + offset += 4 * (ALU_ALIGNMENT / unit_size); ++ // Safety: this check lets us continue to perform the 4 reads earlier + if offset > len_minus_unroll { + break; + } + } + } + while offset <= len_minus_stride { ++ // Safety: the above check lets us perform one usize read. + accu |= unsafe { *(src.add(offset) as *const usize) }; + offset += ALU_ALIGNMENT / unit_size; + } + } + } + for &unit in &buffer[offset..] { + accu |= unit as usize; + } +@@ -184,16 +191,21 @@ macro_rules! by_unit_check_simd { + until_alignment -= 1; + } + if accu >= $bound { + return false; + } + } + let len_minus_stride = len - SIMD_STRIDE_SIZE / unit_size; + if offset + (4 * (SIMD_STRIDE_SIZE / unit_size)) <= len { ++ // Safety: the above check lets us perform 4 consecutive reads of ++ // length SIMD_STRIDE_SIZE / unit_size. SIMD_STRIDE_SIZE is the size of $simd_ty, and unit_size ++ // is the size of the `src` pointer, so this is equal to performing four $simd_ty reads. ++ // ++ // This invariant is upheld on all loop iterations + let len_minus_unroll = len - (4 * (SIMD_STRIDE_SIZE / unit_size)); + loop { + let unroll_accu = unsafe { *(src.add(offset) as *const $simd_ty) } + | unsafe { + *(src.add(offset + (SIMD_STRIDE_SIZE / unit_size)) + as *const $simd_ty) + } + | unsafe { +@@ -203,23 +215,25 @@ macro_rules! by_unit_check_simd { + | unsafe { + *(src.add(offset + (3 * (SIMD_STRIDE_SIZE / unit_size))) + as *const $simd_ty) + }; + if !$func(unroll_accu) { + return false; + } + offset += 4 * (SIMD_STRIDE_SIZE / unit_size); ++ // Safety: this check lets us continue to perform the 4 reads earlier + if offset > len_minus_unroll { + break; + } + } + } + let mut simd_accu = $splat; + while offset <= len_minus_stride { ++ // Safety: the above check lets us perform one $simd_ty read. + simd_accu = simd_accu | unsafe { *(src.add(offset) as *const $simd_ty) }; + offset += SIMD_STRIDE_SIZE / unit_size; + } + if !$func(simd_accu) { + return false; + } + } + } +@@ -229,18 +243,18 @@ macro_rules! by_unit_check_simd { + accu < $bound + } + }; + } + + cfg_if! { + if #[cfg(all(feature = "simd-accel", any(target_feature = "sse2", all(target_endian = "little", target_arch = "aarch64"), all(target_endian = "little", target_feature = "neon"))))] { + use crate::simd_funcs::*; +- use packed_simd::u8x16; +- use packed_simd::u16x8; ++ use core::simd::u8x16; ++ use core::simd::u16x8; + + const SIMD_ALIGNMENT: usize = 16; + + const SIMD_ALIGNMENT_MASK: usize = 15; + + by_unit_check_simd!(is_ascii_impl, u8, u8x16::splat(0), u8x16, 0x80, simd_is_ascii); + by_unit_check_simd!(is_basic_latin_impl, u16, u16x8::splat(0), u16x8, 0x80, simd_is_basic_latin); + by_unit_check_simd!(is_utf16_latin1_impl, u16, u16x8::splat(0), u16x8, 0x100, simd_is_latin1); +diff --git a/third_party/rust/encoding_rs/src/simd_funcs.rs b/third_party/rust/encoding_rs/src/simd_funcs.rs +--- a/third_party/rust/encoding_rs/src/simd_funcs.rs ++++ b/third_party/rust/encoding_rs/src/simd_funcs.rs +@@ -2,65 +2,84 @@ + // file at the top-level directory of this distribution. + // + // Licensed under the Apache License, Version 2.0 or the MIT license + // , at your + // option. This file may not be copied, modified, or distributed + // except according to those terms. + +-use packed_simd::u16x8; +-use packed_simd::u8x16; +-use packed_simd::IntoBits; ++use any_all_workaround::all_mask16x8; ++use any_all_workaround::all_mask8x16; ++use any_all_workaround::any_mask16x8; ++use any_all_workaround::any_mask8x16; ++use core::simd::cmp::SimdPartialEq; ++use core::simd::cmp::SimdPartialOrd; ++use core::simd::mask16x8; ++use core::simd::mask8x16; ++use core::simd::simd_swizzle; ++use core::simd::u16x8; ++use core::simd::u8x16; ++use core::simd::ToBytes; + + // TODO: Migrate unaligned access to stdlib code if/when the RFC + // https://github.com/rust-lang/rfcs/pull/1725 is implemented. + ++/// Safety invariant: ptr must be valid for an unaligned read of 16 bytes + #[inline(always)] + pub unsafe fn load16_unaligned(ptr: *const u8) -> u8x16 { +- let mut simd = ::core::mem::uninitialized(); +- ::core::ptr::copy_nonoverlapping(ptr, &mut simd as *mut u8x16 as *mut u8, 16); +- simd ++ let mut simd = ::core::mem::MaybeUninit::::uninit(); ++ ::core::ptr::copy_nonoverlapping(ptr, simd.as_mut_ptr() as *mut u8, 16); ++ // Safety: copied 16 bytes of initialized memory into this, it is now initialized ++ simd.assume_init() + } + ++/// Safety invariant: ptr must be valid for an aligned-for-u8x16 read of 16 bytes + #[allow(dead_code)] + #[inline(always)] + pub unsafe fn load16_aligned(ptr: *const u8) -> u8x16 { + *(ptr as *const u8x16) + } + ++/// Safety invariant: ptr must be valid for an unaligned store of 16 bytes + #[inline(always)] + pub unsafe fn store16_unaligned(ptr: *mut u8, s: u8x16) { + ::core::ptr::copy_nonoverlapping(&s as *const u8x16 as *const u8, ptr, 16); + } + ++/// Safety invariant: ptr must be valid for an aligned-for-u8x16 store of 16 bytes + #[allow(dead_code)] + #[inline(always)] + pub unsafe fn store16_aligned(ptr: *mut u8, s: u8x16) { + *(ptr as *mut u8x16) = s; + } + ++/// Safety invariant: ptr must be valid for an unaligned read of 16 bytes + #[inline(always)] + pub unsafe fn load8_unaligned(ptr: *const u16) -> u16x8 { +- let mut simd = ::core::mem::uninitialized(); +- ::core::ptr::copy_nonoverlapping(ptr as *const u8, &mut simd as *mut u16x8 as *mut u8, 16); +- simd ++ let mut simd = ::core::mem::MaybeUninit::::uninit(); ++ ::core::ptr::copy_nonoverlapping(ptr as *const u8, simd.as_mut_ptr() as *mut u8, 16); ++ // Safety: copied 16 bytes of initialized memory into this, it is now initialized ++ simd.assume_init() + } + ++/// Safety invariant: ptr must be valid for an aligned-for-u16x8 read of 16 bytes + #[allow(dead_code)] + #[inline(always)] + pub unsafe fn load8_aligned(ptr: *const u16) -> u16x8 { + *(ptr as *const u16x8) + } + ++/// Safety invariant: ptr must be valid for an unaligned store of 16 bytes + #[inline(always)] + pub unsafe fn store8_unaligned(ptr: *mut u16, s: u16x8) { + ::core::ptr::copy_nonoverlapping(&s as *const u16x8 as *const u8, ptr as *mut u8, 16); + } + ++/// Safety invariant: ptr must be valid for an aligned-for-u16x8 store of 16 bytes + #[allow(dead_code)] + #[inline(always)] + pub unsafe fn store8_aligned(ptr: *mut u16, s: u16x8) { + *(ptr as *mut u16x8) = s; + } + + cfg_if! { + if #[cfg(all(target_feature = "sse2", target_arch = "x86_64"))] { +@@ -95,234 +114,241 @@ cfg_if! { + pub fn simd_byte_swap(s: u16x8) -> u16x8 { + let left = s << 8; + let right = s >> 8; + left | right + } + + #[inline(always)] + pub fn to_u16_lanes(s: u8x16) -> u16x8 { +- s.into_bits() ++ u16x8::from_ne_bytes(s) + } + + cfg_if! { + if #[cfg(target_feature = "sse2")] { + + // Expose low-level mask instead of higher-level conclusion, + // because the non-ASCII case would perform less well otherwise. ++ // Safety-usable invariant: This returned value is whether each high bit is set + #[inline(always)] + pub fn mask_ascii(s: u8x16) -> i32 { + unsafe { +- _mm_movemask_epi8(s.into_bits()) ++ _mm_movemask_epi8(s.into()) + } + } + + } else { + + } + } + + cfg_if! { + if #[cfg(target_feature = "sse2")] { + #[inline(always)] + pub fn simd_is_ascii(s: u8x16) -> bool { + unsafe { +- _mm_movemask_epi8(s.into_bits()) == 0 ++ // Safety: We have cfg()d the correct platform ++ _mm_movemask_epi8(s.into()) == 0 + } + } + } else if #[cfg(target_arch = "aarch64")]{ + #[inline(always)] + pub fn simd_is_ascii(s: u8x16) -> bool { + unsafe { +- vmaxvq_u8(s.into_bits()) < 0x80 ++ // Safety: We have cfg()d the correct platform ++ vmaxvq_u8(s.into()) < 0x80 + } + } + } else { + #[inline(always)] + pub fn simd_is_ascii(s: u8x16) -> bool { + // This optimizes better on ARM than + // the lt formulation. + let highest_ascii = u8x16::splat(0x7F); +- !s.gt(highest_ascii).any() ++ !any_mask8x16(s.simd_gt(highest_ascii)) + } + } + } + + cfg_if! { + if #[cfg(target_feature = "sse2")] { + #[inline(always)] + pub fn simd_is_str_latin1(s: u8x16) -> bool { + if simd_is_ascii(s) { + return true; + } + let above_str_latin1 = u8x16::splat(0xC4); +- s.lt(above_str_latin1).all() ++ s.simd_lt(above_str_latin1).all() + } + } else if #[cfg(target_arch = "aarch64")]{ + #[inline(always)] + pub fn simd_is_str_latin1(s: u8x16) -> bool { + unsafe { +- vmaxvq_u8(s.into_bits()) < 0xC4 ++ // Safety: We have cfg()d the correct platform ++ vmaxvq_u8(s.into()) < 0xC4 + } + } + } else { + #[inline(always)] + pub fn simd_is_str_latin1(s: u8x16) -> bool { + let above_str_latin1 = u8x16::splat(0xC4); +- s.lt(above_str_latin1).all() ++ all_mask8x16(s.simd_lt(above_str_latin1)) + } + } + } + + cfg_if! { + if #[cfg(target_arch = "aarch64")]{ + #[inline(always)] + pub fn simd_is_basic_latin(s: u16x8) -> bool { + unsafe { +- vmaxvq_u16(s.into_bits()) < 0x80 ++ // Safety: We have cfg()d the correct platform ++ vmaxvq_u16(s.into()) < 0x80 + } + } + + #[inline(always)] + pub fn simd_is_latin1(s: u16x8) -> bool { + unsafe { +- vmaxvq_u16(s.into_bits()) < 0x100 ++ // Safety: We have cfg()d the correct platform ++ vmaxvq_u16(s.into()) < 0x100 + } + } + } else { + #[inline(always)] + pub fn simd_is_basic_latin(s: u16x8) -> bool { + let above_ascii = u16x8::splat(0x80); +- s.lt(above_ascii).all() ++ all_mask16x8(s.simd_lt(above_ascii)) + } + + #[inline(always)] + pub fn simd_is_latin1(s: u16x8) -> bool { + // For some reason, on SSE2 this formulation + // seems faster in this case while the above + // function is better the other way round... + let highest_latin1 = u16x8::splat(0xFF); +- !s.gt(highest_latin1).any() ++ !any_mask16x8(s.simd_gt(highest_latin1)) + } + } + } + + #[inline(always)] + pub fn contains_surrogates(s: u16x8) -> bool { + let mask = u16x8::splat(0xF800); + let surrogate_bits = u16x8::splat(0xD800); +- (s & mask).eq(surrogate_bits).any() ++ any_mask16x8((s & mask).simd_eq(surrogate_bits)) + } + + cfg_if! { + if #[cfg(target_arch = "aarch64")]{ + macro_rules! aarch64_return_false_if_below_hebrew { + ($s:ident) => ({ + unsafe { +- if vmaxvq_u16($s.into_bits()) < 0x0590 { ++ // Safety: We have cfg()d the correct platform ++ if vmaxvq_u16($s.into()) < 0x0590 { + return false; + } + } + }) + } + + macro_rules! non_aarch64_return_false_if_all { + ($s:ident) => () + } + } else { + macro_rules! aarch64_return_false_if_below_hebrew { + ($s:ident) => () + } + + macro_rules! non_aarch64_return_false_if_all { + ($s:ident) => ({ +- if $s.all() { ++ if all_mask16x8($s) { + return false; + } + }) + } + } + } + + macro_rules! in_range16x8 { + ($s:ident, $start:expr, $end:expr) => {{ + // SIMD sub is wrapping +- ($s - u16x8::splat($start)).lt(u16x8::splat($end - $start)) ++ ($s - u16x8::splat($start)).simd_lt(u16x8::splat($end - $start)) + }}; + } + + #[inline(always)] + pub fn is_u16x8_bidi(s: u16x8) -> bool { + // We try to first quickly refute the RTLness of the vector. If that + // fails, we do the real RTL check, so in that case we end up wasting + // the work for the up-front quick checks. Even the quick-check is + // two-fold in order to return `false` ASAP if everything is below + // Hebrew. + + aarch64_return_false_if_below_hebrew!(s); + +- let below_hebrew = s.lt(u16x8::splat(0x0590)); ++ let below_hebrew = s.simd_lt(u16x8::splat(0x0590)); + + non_aarch64_return_false_if_all!(below_hebrew); + +- if (below_hebrew | in_range16x8!(s, 0x0900, 0x200F) | in_range16x8!(s, 0x2068, 0xD802)).all() { ++ if all_mask16x8( ++ below_hebrew | in_range16x8!(s, 0x0900, 0x200F) | in_range16x8!(s, 0x2068, 0xD802), ++ ) { + return false; + } + + // Quick refutation failed. Let's do the full check. + +- (in_range16x8!(s, 0x0590, 0x0900) +- | in_range16x8!(s, 0xFB1D, 0xFE00) +- | in_range16x8!(s, 0xFE70, 0xFEFF) +- | in_range16x8!(s, 0xD802, 0xD804) +- | in_range16x8!(s, 0xD83A, 0xD83C) +- | s.eq(u16x8::splat(0x200F)) +- | s.eq(u16x8::splat(0x202B)) +- | s.eq(u16x8::splat(0x202E)) +- | s.eq(u16x8::splat(0x2067))) +- .any() ++ any_mask16x8( ++ (in_range16x8!(s, 0x0590, 0x0900) ++ | in_range16x8!(s, 0xFB1D, 0xFE00) ++ | in_range16x8!(s, 0xFE70, 0xFEFF) ++ | in_range16x8!(s, 0xD802, 0xD804) ++ | in_range16x8!(s, 0xD83A, 0xD83C) ++ | s.simd_eq(u16x8::splat(0x200F)) ++ | s.simd_eq(u16x8::splat(0x202B)) ++ | s.simd_eq(u16x8::splat(0x202E)) ++ | s.simd_eq(u16x8::splat(0x2067))), ++ ) + } + + #[inline(always)] + pub fn simd_unpack(s: u8x16) -> (u16x8, u16x8) { +- unsafe { +- let first: u8x16 = shuffle!( +- s, +- u8x16::splat(0), +- [0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23] +- ); +- let second: u8x16 = shuffle!( +- s, +- u8x16::splat(0), +- [8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31] +- ); +- (first.into_bits(), second.into_bits()) +- } ++ let first: u8x16 = simd_swizzle!( ++ s, ++ u8x16::splat(0), ++ [0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23] ++ ); ++ let second: u8x16 = simd_swizzle!( ++ s, ++ u8x16::splat(0), ++ [8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31] ++ ); ++ (u16x8::from_ne_bytes(first), u16x8::from_ne_bytes(second)) + } + + cfg_if! { + if #[cfg(target_feature = "sse2")] { + #[inline(always)] + pub fn simd_pack(a: u16x8, b: u16x8) -> u8x16 { + unsafe { +- _mm_packus_epi16(a.into_bits(), b.into_bits()).into_bits() ++ // Safety: We have cfg()d the correct platform ++ _mm_packus_epi16(a.into(), b.into()).into() + } + } + } else { + #[inline(always)] + pub fn simd_pack(a: u16x8, b: u16x8) -> u8x16 { +- unsafe { +- let first: u8x16 = a.into_bits(); +- let second: u8x16 = b.into_bits(); +- shuffle!( +- first, +- second, +- [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30] +- ) +- } ++ let first: u8x16 = a.to_ne_bytes(); ++ let second: u8x16 = b.to_ne_bytes(); ++ simd_swizzle!( ++ first, ++ second, ++ [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30] ++ ) + } + } + } + + #[cfg(test)] + mod tests { + use super::*; + use alloc::vec::Vec; +diff --git a/third_party/rust/encoding_rs/src/single_byte.rs b/third_party/rust/encoding_rs/src/single_byte.rs +--- a/third_party/rust/encoding_rs/src/single_byte.rs ++++ b/third_party/rust/encoding_rs/src/single_byte.rs +@@ -48,16 +48,19 @@ impl SingleByteDecoder { + CopyAsciiResult::GoOn((mut non_ascii, mut handle)) => 'middle: loop { + // Start non-boilerplate + // + // Since the non-ASCIIness of `non_ascii` is hidden from + // the optimizer, it can't figure out that it's OK to + // statically omit the bound check when accessing + // `[u16; 128]` with an index + // `non_ascii as usize - 0x80usize`. ++ // ++ // Safety: `non_ascii` is a u8 byte >=0x80, from the invariants ++ // on Utf8Destination::copy_ascii_from_check_space_bmp() + let mapped = + unsafe { *(self.table.get_unchecked(non_ascii as usize - 0x80usize)) }; + // let mapped = self.table[non_ascii as usize - 0x80usize]; + if mapped == 0u16 { + return ( + DecoderResult::Malformed(1, 0), + source.consumed(), + handle.written(), +@@ -146,82 +149,103 @@ impl SingleByteDecoder { + dst: &mut [u16], + _last: bool, + ) -> (DecoderResult, usize, usize) { + let (pending, length) = if dst.len() < src.len() { + (DecoderResult::OutputFull, dst.len()) + } else { + (DecoderResult::InputEmpty, src.len()) + }; ++ // Safety invariant: converted <= length. Quite often we have `converted < length` ++ // which will be separately marked. + let mut converted = 0usize; + 'outermost: loop { + match unsafe { ++ // Safety: length is the minimum length, `src/dst + x` will always be valid for reads/writes of `len - x` + ascii_to_basic_latin( + src.as_ptr().add(converted), + dst.as_mut_ptr().add(converted), + length - converted, + ) + } { + None => { + return (pending, length, length); + } + Some((mut non_ascii, consumed)) => { ++ // Safety invariant: `converted <= length` upheld, since this can only consume ++ // up to `length - converted` bytes. ++ // ++ // Furthermore, in this context, ++ // we can assume `converted < length` since this branch is only ever hit when ++ // ascii_to_basic_latin fails to consume the entire slice + converted += consumed; + 'middle: loop { + // `converted` doesn't count the reading of `non_ascii` yet. + // Since the non-ASCIIness of `non_ascii` is hidden from + // the optimizer, it can't figure out that it's OK to + // statically omit the bound check when accessing + // `[u16; 128]` with an index + // `non_ascii as usize - 0x80usize`. ++ // ++ // Safety: We can rely on `non_ascii` being between `0x80` and `0xFF` due to ++ // the invariants of `ascii_to_basic_latin()`, and our table has enough space for that. + let mapped = + unsafe { *(self.table.get_unchecked(non_ascii as usize - 0x80usize)) }; + // let mapped = self.table[non_ascii as usize - 0x80usize]; + if mapped == 0u16 { + return ( + DecoderResult::Malformed(1, 0), + converted + 1, // +1 `for non_ascii` + converted, + ); + } + unsafe { +- // The bound check has already been performed ++ // Safety: As mentioned above, `converted < length` + *(dst.get_unchecked_mut(converted)) = mapped; + } ++ // Safety: `converted <= length` upheld, since `converted < length` before this + converted += 1; + // Next, handle ASCII punctuation and non-ASCII without + // going back to ASCII acceleration. Non-ASCII scripts + // use ASCII punctuation, so this avoid going to + // acceleration just for punctuation/space and then + // failing. This is a significant boost to non-ASCII + // scripts. + // TODO: Split out Latin converters without this part + // this stuff makes Latin script-conversion slower. + if converted == length { + return (pending, length, length); + } ++ // Safety: We are back to `converted < length` because of the == above ++ // and can perform this check. + let mut b = unsafe { *(src.get_unchecked(converted)) }; ++ // Safety: `converted < length` is upheld for this loop + 'innermost: loop { + if b > 127 { + non_ascii = b; + continue 'middle; + } + // Testing on Haswell says that we should write the + // byte unconditionally instead of trying to unread it + // to make it part of the next SIMD stride. + unsafe { ++ // Safety: `converted < length` is true for this loop + *(dst.get_unchecked_mut(converted)) = u16::from(b); + } ++ // Safety: We are now at `converted <= length`. We should *not* `continue` ++ // the loop without reverifying + converted += 1; + if b < 60 { + // We've got punctuation + if converted == length { + return (pending, length, length); + } ++ // Safety: we're back to `converted <= length` because of the == above + b = unsafe { *(src.get_unchecked(converted)) }; ++ // Safety: The loop continues as `converted < length` + continue 'innermost; + } + // We've got markup or ASCII text + continue 'outermost; + } + } + } + } +@@ -229,16 +253,18 @@ impl SingleByteDecoder { + } + + pub fn latin1_byte_compatible_up_to(&self, buffer: &[u8]) -> usize { + let mut bytes = buffer; + let mut total = 0; + loop { + if let Some((non_ascii, offset)) = validate_ascii(bytes) { + total += offset; ++ // Safety: We can rely on `non_ascii` being between `0x80` and `0xFF` due to ++ // the invariants of `ascii_to_basic_latin()`, and our table has enough space for that. + let mapped = unsafe { *(self.table.get_unchecked(non_ascii as usize - 0x80usize)) }; + if mapped != u16::from(non_ascii) { + return total; + } + total += 1; + bytes = &bytes[offset + 1..]; + } else { + return total; +@@ -379,64 +405,89 @@ impl SingleByteEncoder { + dst: &mut [u8], + _last: bool, + ) -> (EncoderResult, usize, usize) { + let (pending, length) = if dst.len() < src.len() { + (EncoderResult::OutputFull, dst.len()) + } else { + (EncoderResult::InputEmpty, src.len()) + }; ++ // Safety invariant: converted <= length. Quite often we have `converted < length` ++ // which will be separately marked. + let mut converted = 0usize; + 'outermost: loop { + match unsafe { ++ // Safety: length is the minimum length, `src/dst + x` will always be valid for reads/writes of `len - x` + basic_latin_to_ascii( + src.as_ptr().add(converted), + dst.as_mut_ptr().add(converted), + length - converted, + ) + } { + None => { + return (pending, length, length); + } + Some((mut non_ascii, consumed)) => { ++ // Safety invariant: `converted <= length` upheld, since this can only consume ++ // up to `length - converted` bytes. ++ // ++ // Furthermore, in this context, ++ // we can assume `converted < length` since this branch is only ever hit when ++ // ascii_to_basic_latin fails to consume the entire slice + converted += consumed; + 'middle: loop { + // `converted` doesn't count the reading of `non_ascii` yet. + match self.encode_u16(non_ascii) { + Some(byte) => { + unsafe { ++ // Safety: we're allowed this access since `converted < length` + *(dst.get_unchecked_mut(converted)) = byte; + } + converted += 1; ++ // `converted <= length` now + } + None => { + // At this point, we need to know if we + // have a surrogate. + let high_bits = non_ascii & 0xFC00u16; + if high_bits == 0xD800u16 { + // high surrogate + if converted + 1 == length { + // End of buffer. This surrogate is unpaired. + return ( + EncoderResult::Unmappable('\u{FFFD}'), + converted + 1, // +1 `for non_ascii` + converted, + ); + } ++ // Safety: convered < length from outside the match, and `converted + 1 != length`, ++ // So `converted + 1 < length` as well. We're in bounds + let second = + u32::from(unsafe { *src.get_unchecked(converted + 1) }); + if second & 0xFC00u32 != 0xDC00u32 { + return ( + EncoderResult::Unmappable('\u{FFFD}'), + converted + 1, // +1 `for non_ascii` + converted, + ); + } + // The next code unit is a low surrogate. + let astral: char = unsafe { ++ // Safety: We can rely on non_ascii being 0xD800-0xDBFF since the high bits are 0xD800 ++ // Then, (non_ascii << 10 - 0xD800 << 10) becomes between (0 to 0x3FF) << 10, which is between ++ // 0x400 to 0xffc00. Adding the 0x10000 gives a range of 0x10400 to 0x10fc00. Subtracting the 0xDC00 ++ // gives 0x2800 to 0x102000 ++ // The second term is between 0xDC00 and 0xDFFF from the check above. This gives a maximum ++ // possible range of (0x10400 + 0xDC00) to (0x102000 + 0xDFFF) which is 0x1E000 to 0x10ffff. ++ // This is in range. ++ // ++ // From a Unicode principles perspective this can also be verified as we have checked that `non_ascii` is a high surrogate ++ // (0xD800..=0xDBFF), and that `second` is a low surrogate (`0xDC00..=0xDFFF`), and we are applying reverse of the UTC16 transformation ++ // algorithm , by applying the high surrogate - 0xD800 to the ++ // high ten bits, and the low surrogate - 0xDc00 to the low ten bits, and then adding 0x10000 + ::core::char::from_u32_unchecked( + (u32::from(non_ascii) << 10) + second + - (((0xD800u32 << 10) - 0x1_0000u32) + 0xDC00u32), + ) + }; + return ( + EncoderResult::Unmappable(astral), + converted + 2, // +2 `for non_ascii` and `second` +@@ -451,52 +502,63 @@ impl SingleByteEncoder { + converted, + ); + } + return ( + EncoderResult::unmappable_from_bmp(non_ascii), + converted + 1, // +1 `for non_ascii` + converted, + ); ++ // Safety: This branch diverges, so no need to uphold invariants on `converted` + } + } + // Next, handle ASCII punctuation and non-ASCII without + // going back to ASCII acceleration. Non-ASCII scripts + // use ASCII punctuation, so this avoid going to + // acceleration just for punctuation/space and then + // failing. This is a significant boost to non-ASCII + // scripts. + // TODO: Split out Latin converters without this part + // this stuff makes Latin script-conversion slower. + if converted == length { + return (pending, length, length); + } ++ // Safety: we're back to `converted < length` due to the == above and can perform ++ // the unchecked read + let mut unit = unsafe { *(src.get_unchecked(converted)) }; + 'innermost: loop { ++ // Safety: This loop always begins with `converted < length`, see ++ // the invariant outside and the comment on the continue below + if unit > 127 { + non_ascii = unit; + continue 'middle; + } + // Testing on Haswell says that we should write the + // byte unconditionally instead of trying to unread it + // to make it part of the next SIMD stride. + unsafe { ++ // Safety: Can rely on converted < length + *(dst.get_unchecked_mut(converted)) = unit as u8; + } + converted += 1; ++ // `converted <= length` here + if unit < 60 { + // We've got punctuation + if converted == length { + return (pending, length, length); + } ++ // Safety: `converted < length` due to the == above. The read is safe. + unit = unsafe { *(src.get_unchecked(converted)) }; ++ // Safety: This only happens if `converted < length`, maintaining it + continue 'innermost; + } + // We've got markup or ASCII text + continue 'outermost; ++ // Safety: All other routes to here diverge so the continue is the only ++ // way to run the innermost loop. + } + } + } + } + } + } + } + +diff --git a/third_party/rust/encoding_rs/src/x_user_defined.rs b/third_party/rust/encoding_rs/src/x_user_defined.rs +--- a/third_party/rust/encoding_rs/src/x_user_defined.rs ++++ b/third_party/rust/encoding_rs/src/x_user_defined.rs +@@ -9,22 +9,23 @@ + + use super::*; + use crate::handles::*; + use crate::variant::*; + + cfg_if! { + if #[cfg(feature = "simd-accel")] { + use simd_funcs::*; +- use packed_simd::u16x8; ++ use core::simd::u16x8; ++ use core::simd::cmp::SimdPartialOrd; + + #[inline(always)] + fn shift_upper(unpacked: u16x8) -> u16x8 { + let highest_ascii = u16x8::splat(0x7F); +- unpacked + unpacked.gt(highest_ascii).select(u16x8::splat(0xF700), u16x8::splat(0)) } ++ unpacked + unpacked.simd_gt(highest_ascii).select(u16x8::splat(0xF700), u16x8::splat(0)) } + } else { + } + } + + pub struct UserDefinedDecoder; + + impl UserDefinedDecoder { + pub fn new() -> VariantDecoder { +@@ -111,20 +112,25 @@ impl UserDefinedDecoder { + } else { + (DecoderResult::InputEmpty, src.len()) + }; + // Not bothering with alignment + let tail_start = length & !0xF; + let simd_iterations = length >> 4; + let src_ptr = src.as_ptr(); + let dst_ptr = dst.as_mut_ptr(); ++ // Safety: This is `for i in 0..length / 16` + for i in 0..simd_iterations { ++ // Safety: This is in bounds: length is the minumum valid length for both src/dst ++ // and i ranges to length/16, so multiplying by 16 will always be `< length` and can do ++ // a 16 byte read + let input = unsafe { load16_unaligned(src_ptr.add(i * 16)) }; + let (first, second) = simd_unpack(input); + unsafe { ++ // Safety: same as above, but this is two consecutive 8-byte reads + store8_unaligned(dst_ptr.add(i * 16), shift_upper(first)); + store8_unaligned(dst_ptr.add((i * 16) + 8), shift_upper(second)); + } + } + let src_tail = &src[tail_start..length]; + let dst_tail = &mut dst[tail_start..length]; + src_tail + .iter() diff --git a/user/zotero/rust1.78-qcms-stdsimd.patch b/user/zotero/rust1.78-qcms-stdsimd.patch new file mode 100644 index 0000000..2c86aa1 --- /dev/null +++ b/user/zotero/rust1.78-qcms-stdsimd.patch @@ -0,0 +1,64 @@ +Relevant bug report: https://bugzilla.mozilla.org/show_bug.cgi?id=1882291 + + +diff --git a/Cargo.lock b/Cargo.lock +--- a/Cargo.lock ++++ b/Cargo.lock +@@ -4274,10 +4274,11 @@ + [[package]] + name = "qcms" + version = "0.2.0" + dependencies = [ + "libc", ++ "version_check", + ] + + [[package]] + name = "qlog" + version = "0.4.0" +diff --git a/gfx/qcms/Cargo.toml b/gfx/qcms/Cargo.toml +--- a/gfx/qcms/Cargo.toml ++++ b/gfx/qcms/Cargo.toml +@@ -18,5 +18,8 @@ + iccv4-enabled = [] + cmyk = [] + + [dependencies] + libc = {version = "0.2", optional = true } ++ ++[build-dependencies] ++version_check = "0.9" +diff --git a/gfx/qcms/build.rs b/gfx/qcms/build.rs +new file mode 100644 +--- /dev/null ++++ b/gfx/qcms/build.rs +@@ -0,0 +1,7 @@ ++extern crate version_check as rustc; ++ ++fn main() { ++ if rustc::is_min_version("1.78.0").unwrap_or(false) { ++ println!("cargo:rustc-cfg=stdsimd_split"); ++ } ++} +diff --git a/gfx/qcms/src/lib.rs b/gfx/qcms/src/lib.rs +--- a/gfx/qcms/src/lib.rs ++++ b/gfx/qcms/src/lib.rs +@@ -5,13 +5,15 @@ + #![allow(non_camel_case_types)] + #![allow(non_snake_case)] + #![allow(non_upper_case_globals)] + // These are needed for the neon SIMD code and can be removed once the MSRV supports the + // instrinsics we use +-#![cfg_attr(feature = "neon", feature(stdsimd))] ++#![cfg_attr(all(stdsimd_split, target_arch = "arm", feature = "neon"), feature(stdarch_arm_neon_intrinsics))] ++#![cfg_attr(all(stdsimd_split, target_arch = "arm", feature = "neon"), feature(stdarch_arm_feature_detection))] ++#![cfg_attr(all(not(stdsimd_split), target_arch = "arm", feature = "neon"), feature(stdsimd))] + #![cfg_attr( +- feature = "neon", ++ all(target_arch = "arm", feature = "neon"), + feature(arm_target_feature, raw_ref_op) + + )] + + /// These values match the Rendering Intent values from the ICC spec + diff --git a/user/zotero/sandbox-fork.patch b/user/zotero/sandbox-fork.patch new file mode 100644 index 0000000..c7222ab --- /dev/null +++ b/user/zotero/sandbox-fork.patch @@ -0,0 +1,15 @@ +make SYS_fork non-fatal, musl uses it for fork(2) + +--- a/security/sandbox/linux/SandboxFilter.cpp ++++ b/security/sandbox/linux/SandboxFilter.cpp +@@ -1253,6 +1253,10 @@ + // usually do something reasonable on error. + case __NR_clone: + return ClonePolicy(Error(EPERM)); ++#ifdef __NR_fork ++ case __NR_fork: ++ return Error(ENOSYS); ++#endif + + # ifdef __NR_fadvise64 + case __NR_fadvise64: diff --git a/user/zotero/sandbox-largefile.patch b/user/zotero/sandbox-largefile.patch new file mode 100644 index 0000000..f1cf28b --- /dev/null +++ b/user/zotero/sandbox-largefile.patch @@ -0,0 +1,17 @@ +--- a/security/sandbox/linux/SandboxFilter.cpp 2020-11-23 22:41:14.556378950 +0100 ++++ b/security/sandbox/linux/SandboxFilter.cpp 2020-11-23 22:40:23.595806444 +0100 +@@ -68,7 +68,13 @@ + + // The headers define O_LARGEFILE as 0 on x86_64, but we need the + // actual value because it shows up in file flags. +-#define O_LARGEFILE_REAL 00100000 ++#if defined(__x86_64__) || defined(__i386__) || defined(__mips__) ++#define O_LARGEFILE_REAL 0100000 ++#elif defined(__powerpc__) ++#define O_LARGEFILE_REAL 0200000 ++#else ++#define O_LARGEFILE_REAL O_LARGEFILE ++#endif + + // Not part of UAPI, but userspace sees it in F_GETFL; see bug 1650751. + #define FMODE_NONOTIFY 0x4000000 diff --git a/user/zotero/sandbox-sched_setscheduler.patch b/user/zotero/sandbox-sched_setscheduler.patch new file mode 100644 index 0000000..ffdf126 --- /dev/null +++ b/user/zotero/sandbox-sched_setscheduler.patch @@ -0,0 +1,24 @@ +upstream bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1657849 +diff --git a/security/sandbox/linux/SandboxFilter.cpp b/security/sandbox/linux/SandboxFilter.cpp +index ed958bc..9824433 100644 +--- a/security/sandbox/linux/SandboxFilter.cpp ++++ b/security/sandbox/linux/SandboxFilter.cpp +@@ -1751,6 +1751,6 @@ class GMPSandboxPolicy : public SandboxPolicyCommon { + case __NR_sched_get_priority_max: ++ case __NR_sched_setscheduler: + return Allow(); + case __NR_sched_getparam: +- case __NR_sched_getscheduler: +- case __NR_sched_setscheduler: { ++ case __NR_sched_getscheduler: { + Arg pid(0); +@@ -1926,3 +1926,2 @@ class RDDSandboxPolicy final : public SandboxPolicyCommon { + case __NR_sched_getscheduler: +- case __NR_sched_setscheduler: + case __NR_sched_getattr: +@@ -1932,2 +1931,5 @@ class RDDSandboxPolicy final : public SandboxPolicyCommon { + } ++ // sched_setscheduler gets special treatment here (bug 1657849): ++ case __NR_sched_setscheduler: ++ return Allow(); + diff --git a/user/zotero/stab.h b/user/zotero/stab.h new file mode 100644 index 0000000..6f70af3 --- /dev/null +++ b/user/zotero/stab.h @@ -0,0 +1,71 @@ +/* $OpenBSD: stab.h,v 1.3 2003/06/02 19:34:12 millert Exp $ */ +/* $NetBSD: stab.h,v 1.4 1994/10/26 00:56:25 cgd Exp $ */ + +/*- + * Copyright (c) 1991 The Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)stab.h 5.2 (Berkeley) 4/4/91 + */ + +#ifndef _STAB_H_ +#define _STAB_H_ + +/* + * The following are symbols used by various debuggers and by the Pascal + * compiler. Each of them must have one (or more) of the bits defined by + * the N_STAB mask set. + */ + +#define N_GSYM 0x20 /* global symbol */ +#define N_FNAME 0x22 /* F77 function name */ +#define N_FUN 0x24 /* procedure name */ +#define N_STSYM 0x26 /* data segment variable */ +#define N_LCSYM 0x28 /* bss segment variable */ +#define N_MAIN 0x2a /* main function name */ +#define N_PC 0x30 /* global Pascal symbol */ +#define N_RSYM 0x40 /* register variable */ +#define N_SLINE 0x44 /* text segment line number */ +#define N_DSLINE 0x46 /* data segment line number */ +#define N_BSLINE 0x48 /* bss segment line number */ +#define N_SSYM 0x60 /* structure/union element */ +#define N_SO 0x64 /* main source file name */ +#define N_LSYM 0x80 /* stack variable */ +#define N_BINCL 0x82 /* include file beginning */ +#define N_SOL 0x84 /* included source file name */ +#define N_PSYM 0xa0 /* parameter variable */ +#define N_EINCL 0xa2 /* include file end */ +#define N_ENTRY 0xa4 /* alternate entry point */ +#define N_LBRAC 0xc0 /* left bracket */ +#define N_EXCL 0xc2 /* deleted include file */ +#define N_RBRAC 0xe0 /* right bracket */ +#define N_BCOMM 0xe2 /* begin common */ +#define N_ECOMM 0xe4 /* end common */ +#define N_ECOML 0xe8 /* end common (local name) */ +#define N_LENG 0xfe /* length of preceding entry */ + +#endif /* !_STAB_H_ */ diff --git a/user/zotero/vendor-prefs.js b/user/zotero/vendor-prefs.js new file mode 100644 index 0000000..3b75075 --- /dev/null +++ b/user/zotero/vendor-prefs.js @@ -0,0 +1,12 @@ +// Use LANG environment variable to choose locale +pref("intl.locale.requested", ""); + +// Use system-provided dictionaries +pref("spellchecker.dictionary_path", "/usr/share/hunspell"); + +// Disable default browser checking. +pref("browser.shell.checkDefaultBrowser", false); + +// Don't disable our bundled extensions in the application directory +pref("extensions.autoDisableScopes", 11); +pref("extensions.shownSelectionUI", true); diff --git a/user/zotero/zotero.desktop b/user/zotero/zotero.desktop new file mode 100644 index 0000000..249ae57 --- /dev/null +++ b/user/zotero/zotero.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Type=Application +Name=Zotero +GenericName=Zotero Standalone. Is a free, easy-to-use tool to help you collect, organize, cite, and share your research sources. +Icon=zotero +Exec=/usr/bin/zotero -url %U +Categories=Office +Terminal=false +MimeType=x-scheme-handler/zotero diff --git a/user/zotero/zotero_build-modifications.patch b/user/zotero/zotero_build-modifications.patch new file mode 100644 index 0000000..22aa90e --- /dev/null +++ b/user/zotero/zotero_build-modifications.patch @@ -0,0 +1,144 @@ +diff --git a/zotero/app/build.sh b/zotero/app/build.sh +index 649d629..7d078b8 100755 +--- a/zotero/app/build.sh ++++ b/zotero/app/build.sh +@@ -59,10 +59,7 @@ function abspath { + } + + function check_lfs_file { +- if [ "$(head --bytes 5 "$1")" = "versi" ]; then +- echo "$1 not checked out -- install Git LFS and run 'git lfs pull'" >&2 +- exit 1 +- fi ++ return 0 + } + + SOURCE_DIR="" +@@ -840,18 +837,13 @@ if [ $BUILD_LINUX == 1 ]; then + cp -r "$runtime_path/"!(application.ini|browser|defaults|devtools-files|crashreporter|crashreporter.ini|firefox|pingsender|precomplete|removed-files|run-mozilla.sh|update-settings.ini|updater|updater.ini) "$APPDIR" + + # Use our own launcher that calls the original Firefox executable with -app +- mv "$APPDIR"/firefox-bin "$APPDIR"/zotero-bin ++ mv "$APPDIR"/firefox-esr "$APPDIR"/zotero-bin + cp "$CALLDIR/linux/zotero" "$APPDIR"/zotero + + # Copy Ubuntu launcher files + cp "$CALLDIR/linux/zotero.desktop" "$APPDIR" + cp "$CALLDIR/linux/set_launcher_icon" "$APPDIR" + +- # Use our own updater, because Mozilla's requires updates signed by Mozilla +- check_lfs_file "$CALLDIR/linux/updater.tar.xz" +- tar xf "$CALLDIR/linux/updater.tar.xz" --to-stdout updater-$arch > "$APPDIR/updater" +- chmod 755 "$APPDIR/updater" +- + # Copy app files + rsync -a "$base_dir/" "$APPDIR/" + +@@ -860,6 +852,7 @@ if [ $BUILD_LINUX == 1 ]; then + cp -RH "$CALLDIR/modules/zotero-libreoffice-integration/install" "$APPDIR/integration/libreoffice" + + # Copy icons ++ mkdir -p "$APPDIR"/icons + cp "$CALLDIR/linux/icons/icon32.png" "$APPDIR/icons/" + cp "$CALLDIR/linux/icons/icon64.png" "$APPDIR/icons/" + cp "$CALLDIR/linux/icons/icon128.png" "$APPDIR/icons/" + +diff --git a/zotero/app/build.sh.orig b/zotero/app/build.sh +index 702f499..3ee7e34 100755 +--- a/zotero/app/build.sh.orig ++++ b/zotero/app/build.sh +@@ -189,7 +189,7 @@ BUILD_ID=`date +%Y%m%d%H%M%S` + # Paths to Gecko runtimes + MAC_RUNTIME_PATH="$CALLDIR/xulrunner/Firefox.app" + WIN_RUNTIME_PATH_PREFIX="$CALLDIR/xulrunner/firefox-" +-LINUX_RUNTIME_PATH_PREFIX="$CALLDIR/xulrunner/firefox-" ++LINUX_RUNTIME_PATH_PREFIX="$CALLDIR/xulrunner/firefox" + + base_dir="$BUILD_DIR/base" + app_dir="$BUILD_DIR/base/app" +@@ -223,8 +223,8 @@ elif [ $BUILD_WIN == 1 ]; then + unzip -qj "${WIN_RUNTIME_PATH_PREFIX}win-x64"/omni.ja "hyphenation/*" -d "$app_dir"/hyphenation/ + elif [ $BUILD_LINUX == 1 ]; then + # Non-arch-specific files, so just use 64-bit version +- cp -Rp "${LINUX_RUNTIME_PATH_PREFIX}x86_64"/browser/omni "$app_dir" +- unzip -qj "${LINUX_RUNTIME_PATH_PREFIX}x86_64"/omni.ja "hyphenation/*" -d "$app_dir"/hyphenation/ ++ cp -Rp "${LINUX_RUNTIME_PATH_PREFIX}"/browser/omni "$app_dir" ++ unzip -qj "${LINUX_RUNTIME_PATH_PREFIX}"/omni.ja "hyphenation/*" -d "$app_dir"/hyphenation/ + fi + set -e + cd $omni_dir +@@ -825,11 +825,11 @@ if [ $BUILD_LINUX == 1 ]; then + fi + + for arch in $archs; do +- runtime_path="${LINUX_RUNTIME_PATH_PREFIX}${arch}" ++ runtime_path="${LINUX_RUNTIME_PATH_PREFIX}" + + # Set up directory +- echo 'Building Zotero_linux-'$arch +- APPDIR="$STAGE_DIR/Zotero_linux-$arch" ++ echo 'Building Zotero_linux' ++ APPDIR="$STAGE_DIR/Zotero_linux" + rm -rf "$APPDIR" + mkdir "$APPDIR" + +diff --git a/zotero/app/scripts/fetch_xulrunner.orig b/zotero/app/scripts/fetch_xulrunner +index 2b57bfb..2bbc110 100755 +--- a/zotero/app/scripts/fetch_xulrunner.orig ++++ b/zotero/app/scripts/fetch_xulrunner +@@ -134,15 +134,6 @@ function modify_omni { + # Continue using app.update.auto in prefs.js on Windows + replace_line 'PER_INSTALLATION_PREFS_PLATFORMS = \["win"\]' 'PER_INSTALLATION_PREFS_PLATFORMS = []' modules/UpdateUtils.sys.mjs + +- # Prompt if major update is available instead of installing automatically on restart +- replace_line 'if \(!updateAuto\) \{' 'if (update.type == "major") { +- LOG("UpdateService:_selectAndInstallUpdate - prompting because it is a major update"); +- AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_SHOWPROMPT_PREF); +- Services.obs.notifyObservers(update, "update-available", "show-prompt"); +- return; +- } +- if (!updateAuto) {' modules/UpdateService.sys.mjs +- + # Avoid console warning about resource://gre/modules/FxAccountsCommon.js + replace_line 'const logins = this._data.logins;' 'const logins = this._data.logins; if (this._data.logins.length != -1) return;' modules/LoginStore.sys.mjs + +@@ -516,36 +507,10 @@ fi + + if [ $BUILD_LINUX == 1 ]; then + GECKO_VERSION="$GECKO_VERSION_LINUX" +- DOWNLOAD_URL="https://ftp.mozilla.org/pub/firefox/releases/$GECKO_VERSION" + +- +- # Include 32-bit build if not in CI +- if [[ "${CI:-}" = "1" ]] || [[ "${SKIP_32:-}" = "1" ]]; then +- arches="x86_64" +- else +- arches="i686 x86_64" +- fi +- for arch in $arches; do +- xdir="firefox-$arch" +- rm -rf $xdir +- +- archived_file="firefox-$GECKO_VERSION-$arch.tar.bz2" +- if [ -e "$archived_file" ]; then +- echo "Using $archived_file" +- cp "$archived_file" "firefox-$GECKO_VERSION.tar.bz2" +- else +- curl -O "$DOWNLOAD_URL/linux-$arch/en-US/firefox-$GECKO_VERSION.tar.bz2" +- fi +- +- tar xvf firefox-$GECKO_VERSION.tar.bz2 +- mv firefox firefox-$arch +- +- pushd firefox-$arch +- modify_omni $arch +- popd +- echo $($SCRIPT_DIR/xulrunner_hash -p l) > hash-linux +- rm "firefox-$GECKO_VERSION.tar.bz2" +- done ++ pushd firefox ++ modify_omni linux64 ++ popd + fi + + echo Done diff --git a/user/zotero/zotero_drop-jazzer.patch b/user/zotero/zotero_drop-jazzer.patch new file mode 100644 index 0000000..4644e66 --- /dev/null +++ b/user/zotero/zotero_drop-jazzer.patch @@ -0,0 +1,12 @@ +diff --git a/zotero/pdf-worker/pdf.js/package.json.orig b/zotero/pdf-worker/pdf.js/package.json +index 3025926..13f8b7a 100644 +--- a/zotero/pdf-worker/pdf.js/package.json.orig ++++ b/zotero/pdf-worker/pdf.js/package.json +@@ -7,7 +7,6 @@ + "@babel/runtime": "^7.24.8", + "@fluent/bundle": "^0.18.0", + "@fluent/dom": "^0.10.0", +- "@jazzer.js/core": "^2.1.0", + "@metalsmith/layouts": "^2.7.0", + "@metalsmith/markdown": "^1.10.0", + "autoprefixer": "^10.4.19", diff --git a/user/zotero/zotero_test-drop-build.patch b/user/zotero/zotero_test-drop-build.patch new file mode 100644 index 0000000..a318f84 --- /dev/null +++ b/user/zotero/zotero_test-drop-build.patch @@ -0,0 +1,23 @@ +diff --git a/zotero/test/runtests.sh.orig b/zotero/test/runtests.sh +index d83914a..ec91848 100755 +--- a/zotero/test/runtests.sh.orig ++++ b/zotero/test/runtests.sh +@@ -154,18 +154,6 @@ fi + # Clean up on exit + trap "{ rm -rf \"$TEMPDIR\"; }" EXIT + +-# Check if build watch process is running +-# If not, run now +-if [[ -z "$CI" ]] && ! ps | grep js-build/build.js | grep -v grep > /dev/null; then +- echo +- echo "Running JS build process" +- cd "$ROOT_DIR" +- NODE_OPTIONS=--openssl-legacy-provider npm run build || exit $? +- echo +-fi +- +-ZOTERO_TEST=1 "$ROOT_DIR/app/scripts/dir_build" -q +- + makePath FX_PROFILE "$PROFILE" + MOZ_NO_REMOTE=1 NO_EM_RESTART=1 "$Z_EXECUTABLE" -profile "$FX_PROFILE" \ + -test "$TESTS" -grep "$GREP" -ZoteroTest $Z_ARGS diff --git a/user/zotero/zotero_test-fix-chars.patch b/user/zotero/zotero_test-fix-chars.patch new file mode 100644 index 0000000..de0daa0 --- /dev/null +++ b/user/zotero/zotero_test-fix-chars.patch @@ -0,0 +1,16 @@ +diff --git a/zotero/node_modules/mocha/mocha.js.orig b/zotero/node_modules/mocha/mocha.js +index c3e0c12..95fff4d 100644 +--- a/zotero/node_modules/mocha/mocha.js.orig ++++ b/zotero/node_modules/mocha/mocha.js +@@ -11473,9 +11473,9 @@ + + var browser$1 = { + info: 'ℹ️', +- success: '✅', ++ success: '✔', + warning: '⚠️', +- error: '❌️' ++ error: 'x' + }; + + var require$$0 = /*@__PURE__*/getAugmentedNamespace(_polyfillNode_events) diff --git a/user/zotero/zotero_test-push-timeout-to-30sec.patch b/user/zotero/zotero_test-push-timeout-to-30sec.patch new file mode 100644 index 0000000..e3c5a10 --- /dev/null +++ b/user/zotero/zotero_test-push-timeout-to-30sec.patch @@ -0,0 +1,13 @@ +diff --git a/zotero/test/runtests.sh.orig b/zotero/test/runtests.sh +index d83914a3baa..e00efdb6506 100755 +--- a/zotero/test/runtests.sh.orig ++++ b/zotero/test/runtests.sh +@@ -146,7 +146,7 @@ user_pref("extensions.zoteroOpenOfficeIntegration.skipInstallation", true); + EOF + + if [ -n "$CI" ]; then +- Z_ARGS="$Z_ARGS -ZoteroAutomatedTest -ZoteroTestTimeout 15000" ++ Z_ARGS="$Z_ARGS -ZoteroAutomatedTest -ZoteroTestTimeout 30000" + else + Z_ARGS="$Z_ARGS -jsconsole" + fi