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 index ee9ed3c..d2720f3 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -1,49 +1,11 @@ #!/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 -# +# downstream: downstream repo 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 +curl --silent $downstream/x86_64/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) @@ -53,145 +15,27 @@ else 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 + upstream_version=$(curl --fail -X GET -sS -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/packages/?name=$pkg&distribution=Alpine" | jq -r '.items.[].stable_version') 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 + # special cases 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 - ;; + freetube) upstream_version=$(curl --fail -X GET -sS -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/packages/?name=$pkg&distribution=Alpine" | jq -r '.items.[].version' | sed "s|-beta||");; + dotnet9-sdk|dotnet9-stage0) upstream_version=${upstream_version/-*};; 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 + echo "$pkg" >> not_in_anitya elif [ "$downstream_version" != "$(printf '%s\n' $upstream_version $downstream_version | sort -V | head -n 1)" ]; then - echo "$pkg higher downstream $upstream_version" + echo "$pkg higher downstream" 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 + echo "$pkg upstream version $upstream_version does not match downstream version $downstream_version" + echo "$pkg $downstream_version $upstream_version $repo" >> out_of_date fi done diff --git a/.forgejo/bin/clear-repo.sh b/.forgejo/bin/clear-repo.sh index 486321b..14110ea 100755 --- a/.forgejo/bin/clear-repo.sh +++ b/.forgejo/bin/clear-repo.sh @@ -1,22 +1,17 @@ #!/bin/sh TARGET_REPO=$1 -ARCH="x86 x86_64 armhf armv7 aarch64 ppc64le s390x mips64 riscv64 loongarch64" +ARCH=$2 -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 +curl --silent $TARGET_REPO/$ARCH/APKINDEX.tar.gz | tar -O -zx APKINDEX > APKINDEX - pkgs=$(awk -F ':' '{if($1=="o"){print $2}}' APKINDEX | sort | uniq) +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 +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 diff --git a/.forgejo/bin/create_issue.sh b/.forgejo/bin/create_issue.sh index 3164b14..d162758 100755 --- a/.forgejo/bin/create_issue.sh +++ b/.forgejo/bin/create_issue.sh @@ -1,7 +1,7 @@ #!/bin/bash # expects: -# env variable ISSUE_TOKEN +# env variable FORGEJO_TOKEN # file out_of_date IFS=' @@ -13,23 +13,14 @@ does_it_exist() { 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')" + query="$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' )" - result="$(curl -L --silent -X 'GET' \ - "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues&sort=latest" \ + result="$(curl --silent -X 'GET' \ + "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues" \ -H 'accept: application/json' \ - -H "Authorization: token $ISSUE_TOKEN" + -H "authorization: Basic $FORGEJO_TOKEN" )" if [ "$result" == "[]" ]; then @@ -42,23 +33,14 @@ is_it_old() { 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')" + query="$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' )" - result="$(curl -L --silent -X 'GET' \ - "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues&sort=latest" \ + result="$(curl --silent -X 'GET' \ + "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues" \ -H 'accept: application/json' \ - -H "authorization: token $ISSUE_TOKEN" + -H "authorization: Basic $FORGEJO_TOKEN" )" result_title="$(echo $result | jq -r '.[].title' )" @@ -77,18 +59,16 @@ update_title() { downstream_version=$2 upstream_version=$3 repo=$4 - release=$5 - id=$6 + id=$5 - title="$repo/$name: upgrade to $upstream_version" - if [ "$release" != "edge" ]; then title="[$release] $title"; fi - - result=$(curl -L --silent -X 'PATCH' \ + result=$(curl --silent -X 'PATCH' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues/$id" \ -H 'accept: application/json' \ - -H "authorization: token $ISSUE_TOKEN" \ + -H "authorization: Basic $FORGEJO_TOKEN" \ -H 'Content-Type: application/json' \ - -d "{\"title\": \"$title\"}" + -d "{ + \"title\": \"$repo/$name: upgrade to $upstream_version\" + }" ) return 0 @@ -99,18 +79,14 @@ create_issue() { 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' \ + result=$(curl --silent -X 'POST' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues" \ -H 'accept: application/json' \ - -H "authorization: token $ISSUE_TOKEN" \ + -H "authorization: Basic $FORGEJO_TOKEN" \ -H 'Content-Type: application/json' \ -d "{ - \"title\": \"$title\", + \"title\": \"$repo/$name: upgrade to $upstream_version\", \"labels\": [ $LABEL_NUMBER ] @@ -129,42 +105,41 @@ if [ -f out_of_date ]; then 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 + if does_it_exist $name $downstream_version $upstream_version $repo; then echo "Issue for $repo/$name already exists" continue fi - id=$(is_it_old $name $downstream_version $upstream_version $repo $release) + id=$(is_it_old $name $downstream_version $upstream_version $repo) if [ "$id" != "0" ] && [ -n "$id" ]; then echo "Issue for $repo/$name needs updating" - update_title $name $downstream_version $upstream_version $repo $release $id + update_title $name $downstream_version $upstream_version $repo $id continue fi echo "Creating issue for $repo/$name" - create_issue $name $downstream_version $upstream_version $repo $release + create_issue $name $downstream_version $upstream_version $repo done fi if [ -f not_in_anitya ]; then query="Add missing $repo packages to anitya" - query="%22$(echo $query | sed 's| |%20|g')%22" + query="$(echo $query | sed 's| |%20|g')" - result="$(curl -L --silent -X 'GET' \ - "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues&sort=latest" \ + result="$(curl --silent -X 'GET' \ + "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues" \ -H 'accept: application/json' \ - -H "authorization: token $ISSUE_TOKEN" + -H "authorization: Basic $FORGEJO_TOKEN" )" if [ "$result" == "[]" ]; then echo "Creating anitya issue" - result=$(curl -L --silent -X 'POST' \ + result=$(curl --silent -X 'POST' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues" \ -H 'accept: application/json' \ - -H "authorization: token $ISSUE_TOKEN" \ + -H "authorization: Basic $FORGEJO_TOKEN" \ -H 'Content-Type: application/json' \ -d "{ \"title\": \"Add missing $repo packages to anitya\", @@ -177,10 +152,10 @@ if [ -f not_in_anitya ]; then else echo "Updating anitya issue" result_id="$(echo $result | jq -r '.[].number' )" - result=$(curl -L --silent -X 'PATCH' \ + result=$(curl --silent -X 'PATCH' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues/$result_id" \ -H 'accept: application/json' \ - -H "authorization: token $ISSUE_TOKEN" \ + -H "authorization: Basic $FORGEJO_TOKEN" \ -H 'Content-Type: application/json' \ -d "{ \"body\": \"- [ ] $(sed '{:q;N;s/\n/\\n- [ ] /g;t q}' not_in_anitya)\" diff --git a/.forgejo/bin/deploy.sh b/.forgejo/bin/deploy.sh index 57afd32..3138b69 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") 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..59f90c9 100644 --- a/.forgejo/workflows/build-aarch64.yaml +++ b/.forgejo/workflows/build-aarch64.yaml @@ -15,7 +15,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 @@ -28,7 +27,7 @@ jobs: ${{ github.workspace }}/.forgejo/bin/build.sh touch packages/dummy - name: Package upload - uses: actions/upload-artifact@v3 + uses: forgejo/upload-artifact@v3 with: name: package path: packages @@ -40,7 +39,6 @@ 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 }} steps: @@ -49,6 +47,6 @@ jobs: - 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..298a213 100644 --- a/.forgejo/workflows/build-x86_64.yaml +++ b/.forgejo/workflows/build-x86_64.yaml @@ -15,7 +15,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 @@ -28,7 +27,7 @@ jobs: ${{ github.workspace }}/.forgejo/bin/build.sh touch packages/dummy - name: Package upload - uses: actions/upload-artifact@v3 + uses: forgejo/upload-artifact@v3 with: name: package path: packages @@ -40,7 +39,6 @@ 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 }} steps: @@ -49,6 +47,6 @@ jobs: - 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 index 99bb71d..b9f76a6 100644 --- a/.forgejo/workflows/check-backports.yml +++ b/.forgejo/workflows/check-backports.yml @@ -7,12 +7,12 @@ on: jobs: check-backports: name: Check backports repo - runs-on: aarch64 + runs-on: x86_64 container: image: alpine:latest env: - downstream: https://ayakael.net/api/packages/forge/alpine/v3.23/backports - ISSUE_TOKEN: ${{ secrets.issue_token }} + downstream: https://ayakael.net/api/packages/forge/alpine/v3.21/backports + FORGEJO_TOKEN: ${{ secrets.forgejo_token }} LABEL_NUMBER: 1 ALL_PACKAGES: true steps: diff --git a/.forgejo/workflows/check-community.yml b/.forgejo/workflows/check-community.yml index ee6d624..9385687 100644 --- a/.forgejo/workflows/check-community.yml +++ b/.forgejo/workflows/check-community.yml @@ -5,14 +5,14 @@ on: - cron: '0 5 * * *' jobs: - check-community-edge: - name: Check community(edge) repo - runs-on: aarch64 + check-community: + name: Check community repo + runs-on: x86_64 container: image: alpine:latest env: downstream: https://dl-cdn.alpinelinux.org/alpine/edge/community - ISSUE_TOKEN: ${{ secrets.issue_token }} + FORGEJO_TOKEN: ${{ secrets.forgejo_token }} LABEL_NUMBER: 4 steps: - name: Environment setup @@ -25,92 +25,3 @@ jobs: 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 index 71ad18e..2b8f7ed 100644 --- a/.forgejo/workflows/check-testing.yml +++ b/.forgejo/workflows/check-testing.yml @@ -5,16 +5,15 @@ on: - cron: '0 5 * * *' jobs: - check-testing: + check-community: name: Check testing repo - runs-on: aarch64 + runs-on: x86_64 container: image: alpine:latest env: downstream: https://dl-cdn.alpinelinux.org/alpine/edge/testing - ISSUE_TOKEN: ${{ secrets.issue_token }} + FORGEJO_TOKEN: ${{ secrets.forgejo_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 diff --git a/.forgejo/workflows/check-user.yml b/.forgejo/workflows/check-user.yml index db1f574..09b0f3c 100644 --- a/.forgejo/workflows/check-user.yml +++ b/.forgejo/workflows/check-user.yml @@ -7,13 +7,13 @@ on: jobs: check-user: name: Check user repo - runs-on: aarch64 + runs-on: x86_64 container: image: alpine:latest env: downstream: https://ayakael.net/api/packages/forge/alpine/edge/user - ISSUE_TOKEN: ${{ secrets.issue_token }} - LABEL_NUMBER: 12 + FORGEJO_TOKEN: ${{ secrets.forgejo_token }} + LABEL_NUMBER: 4 steps: - name: Environment setup run: apk add grep coreutils gawk curl wget bash nodejs git jq sed 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/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..64a7a04 100644 --- a/backports/calibre/APKBUILD +++ b/backports/calibre/APKBUILD @@ -1,6 +1,6 @@ # Maintainer: Cowington Post pkgname=calibre -pkgver=8.14.0 +pkgver=7.21.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,12 +54,12 @@ makedepends=" podofo-dev py3-pyqt-builder py3-pyqt6-sip - py3-qt6 py3-sip python3-dev qt6-qtbase-dev uchardet-dev xdg-utils + ffmpeg-dev " subpackages=" $pkgname-pyc @@ -71,15 +69,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 @@ -116,8 +111,6 @@ package() { } sha512sums=" -edb32e47b083e10fbf53088e485737f3b61bb642ce6c4dd444e58a6618979c3b05b77ceffc4b8cb42e35eee7dcc2b94145abc22030ffd8b5de63e45b321fbf72 calibre-8.14.0.tar.xz +0c2ee610833df83219c0c33b09e1374a8262f1630ccd48e3c4725c92922a3ac5d102ad83fc213457fb9de3efa4f5a2c98ff6dff039828e1661085a1054d7f631 calibre-7.21.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/APKBUILD b/backports/caprine/APKBUILD index f8f2b6d..9a73d39 100644 --- a/backports/caprine/APKBUILD +++ b/backports/caprine/APKBUILD @@ -1,8 +1,8 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=caprine -pkgver=2.60.3 -pkgrel=6 +pkgver=2.60.1 +pkgrel=2 pkgdesc="Elegant Facebook Messenger desktop app" arch="x86_64 aarch64" # blocked by electron url="https://github.com/sindresorhus/caprine" @@ -17,10 +17,12 @@ source=" " 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() { @@ -57,7 +59,7 @@ package() { -or -name "test" -prune -exec rm -r '{}' \; } sha512sums=" -edf6452294b3c661befd9811c5836da33311171d587cb9a5939ac11a0c1e2a7ebbc4f2a8d81e02c1db1a2d814ac1aa7bbdadca9e21892cc8d7f7e9c23dc2e221 caprine-2.60.3.tar.gz +0df7f233c91f5a044dcffde94b976c6ad71e6d355518615c48cd825a249c01d63f455de31ece69193a66ca0fd8157506f9b88088da1bd47fc75e9d3800784ed0 caprine-2.60.1.tar.gz a469e3bea24926119e51642b777ef794c5fa65421107903f967c36d81bbb1adb3d52469ce3a3301b2c890f1aa53ab989ded22a7c6e811fb8cf0a582dbd835e19 caprine.desktop 3ad8994c1a0417e73d622587769e527b4236a32c1a89442ff76413b75b4392d667c9e2908979b453e5926e54db6d94b31625340c5a94e84e91ea77f56feae778 caprine.sh " diff --git a/backports/coin/APKBUILD b/backports/coin/APKBUILD new file mode 100644 index 0000000..723ea30 --- /dev/null +++ b/backports/coin/APKBUILD @@ -0,0 +1,36 @@ +# Contributor: Aiden Grossman +# Maintainer: +pkgname=coin +pkgver=4.0.0 +pkgrel=7 +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..7c669be --- /dev/null +++ b/backports/cura/APKBUILD @@ -0,0 +1,76 @@ +# 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" +# 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 +arch="noarch !ppc64le !x86 !armhf !riscv64 !s390x !armv7" +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/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..72d6e87 100644 --- a/backports/electron/APKBUILD +++ b/backports/electron/APKBUILD @@ -1,23 +1,23 @@ # Contributor: lauren n. liberda # Maintainer: Antoine Martin (ayakael) pkgname=electron -pkgver=39.2.7 +pkgver=33.2.1 _gittag=v"${pkgver/_beta/-beta.}" pkgrel=0 -_chromium=142.0.7444.235 -_copium_tag=142.0 +_chromium=130.0.6723.127 +_copium_tag=129.1 _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 +_llvmver=19 makedepends=" ada-dev alsa-lib-dev aom-dev + base64-dev bash brotli-dev bsd-compat-headers @@ -25,8 +25,8 @@ makedepends=" c-ares-dev cairo-dev clang$_llvmver-dev - clang$_llvmver-rtlib clang-extra-tools + compiler-rt crc32c-dev cups-dev curl-dev @@ -45,7 +45,6 @@ makedepends=" gn gzip harfbuzz-dev - highway-dev hdrhistogram-c-dev hunspell-dev http-parser-dev @@ -60,6 +59,7 @@ makedepends=" libbsd-dev libcap-dev libdrm-dev + libevent-dev libexif-dev libgcrypt-dev libjpeg-turbo-dev @@ -76,8 +76,7 @@ makedepends=" libxscrnsaver-dev libxslt-dev linux-headers - lld$_llvmver - llhttp-dev + lld llvm$_llvmver mesa-dev minizip-dev @@ -97,19 +96,19 @@ makedepends=" py3-setuptools py3-six python3 + qt5-qtbase-dev re2-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 " @@ -118,20 +117,19 @@ subpackages="$pkgname-lang $pkgname-dev" source=" https://ayakael.net/api/packages/mirrors/generic/electron/$_gittag/electron-$_gittag-$_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-opus.patch fstatat-32bit.patch gdbinit.patch generic-sensor-include.patch - headless-shell-no-license.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 @@ -139,47 +137,41 @@ source=" partalloc-no-tagging-arm64.patch pvalloc.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 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 + cr126-aarch64-musl-unsupported-relocation.patch + cr129-ffmpeg-no-noh264parse.patch + cr129-musl-metricts-imports.patch " -# Avoid conflicting providers -sonameprefix="$pkgname:" # tests are todo for some base checks options="!check net suid" builddir="$srcdir/electron-$_gittag-$_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-$_llvmver +export CXX=clang++-$_llvmver # 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++-$_llvmver # 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 +184,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() { @@ -236,8 +224,8 @@ 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 \ + --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 \ @@ -272,8 +260,6 @@ snapshot() { mcli cp "$SRCDEST"/$pkgname-$_gittag-$_chromium.tar.zst "$_distbucket" } -export RUSTC_BOOTSTRAP=1 - prepare() { default_prepare @@ -311,7 +297,7 @@ prepare() { git commit -m "init" git tag "$_gittag" git pack-refs - yarn install --immutable --mode=skip-build + yarn install --frozen-lockfile --ignore-scripts ) ( @@ -319,19 +305,13 @@ 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 + # highway - requires highway>=1.1.0 (arm failures) # 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 local chromium_use_system=" brotli crc32c @@ -342,8 +322,9 @@ prepare() { fontconfig freetype harfbuzz-ng - highway + icu libdrm + libevent libjpeg libsecret libusb @@ -352,7 +333,6 @@ prepare() { libxslt openh264 opus - simdutf zlib zstd " @@ -372,9 +352,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 @@ -431,8 +412,6 @@ prepare() { third_party/blink/renderer/core/xml/parser/xml_document_parser.cc \ third_party/libxml/chromium/*.cc - echo "$CTARGET" >> build/rust/known-target-triples.txt - _configure } @@ -466,9 +445,10 @@ _configure() { 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,10 +458,8 @@ _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 rtc_link_pipewire=true rtc_use_pipewire=true @@ -491,7 +469,6 @@ _configure() { 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 +482,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 +497,14 @@ _configure() { } build() { - export ELECTRON_OUT_DIR="$builddir"/out/Release/ + export PATH="$PATH:/usr/lib/qt5/bin" ninja -C out/Release \ copy_node_headers \ electron_dist_zip \ node_gypi_headers \ node_version_header + } package() { @@ -565,37 +544,34 @@ 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 +e2df4454f4178af859c13aadee4ea04a5b6aa202972cad625e54bc68f5b8c25e098e50d428ec9c1886c37ccf49aaaedb4c5f02fc8bdd498314ba216901932185 electron-v33.2.1-130.0.6723.127.tar.zst +6138b3dbf3903c78f4ca1ed5a6c3c3c485471ded31976010484ce8893d03953df2b8f066a4fe84bbde5ae7ef9bbff664ef917e247b2e95dd471de40f2774d7d0 copium-129.1.tar.gz +29bb685e03356a77df5fd347cdf55194cc8b3265c421cc76e54d64edefc329dbcb052deb26b22e8f587ce68456876c071de1b7d258dd0fcc6ee66c875ec4a020 chromium-revert-drop-of-system-java.patch +53b7cdee8f7bfb4c9371cb385c473e34ed3d8ac7efaa43c0af061107560be30d8747b07fb0b16c01079b8c770f2c721bb5a8081313b7c126856ea4078a74da2a compiler.patch +4057cc78f10bfd64092bc35a373869abb1d68b880cdbca70422f39ffd78a929c19c7728d4d4c40709aaba25581148a93ae5343e724849fd35323062ed68753fa disable-dns_config_service.patch +2470904846e3adde2c9506f9e78220daca0932320b628dd3d427bf2b7c17a8f7880cb97e787b046c28de7aca642e1a8d30824d6049905976da77e7473baa64da disable-failing-tests.patch +5fc5c012c1db6cf1ba82f38c6f3f4f5ca3a209e47ac708a74de379b018e0649b7694877c9571ef79002dde875ffc07b458a3355425f1c01867f362c66c2bc1bf fc-cache-version.patch +b24563e9a738c00fce7ff2fbdee3d7c024d9125d7c74d9ab90af6bdb16f7ec8419f2c8aa78c0640f6d5d81c17dc2c673a194401d354f466749672729b48ed068 fix-opus.patch c63dee5044353eb306a39ca1526158c0f003ab310ecb03d1c368dc2a979454590c84b8d3c15484517d5e66bb8add9b231da9abbadf2e50850abd72ac1345c4ab fstatat-32bit.patch 33ee60863cc438ef57ffef92ba4cf67a856a5ffc16138bce241bcf87e47b15154aa86918e793c26f7ec4dc62a445257ad5673ed7001daf22c4043cf6cc57da7f gdbinit.patch 36a764fa73443b47d38050b52dbe6ad2fa8d67201ff4ccdbad13b52308ef165ca046aac6f9609fe35890a6485f0f3e672e78cc41e3e44f3cdc7f145e540524e8 generic-sensor-include.patch -a94cf7a0670abf5178abba33c619cc6d41d73f2e16c7a1fd5b152152f5077df103e049d166e3b8627797c38113821d2f2e6b64cd48d132c1e90ad32d63a349f5 headless-shell-no-license.patch +99bcc7dd485b404a90c606a96addab1d900852128d44fb8cea8acc7303189ef87c89a7b0e749fd0e10c5ef5f6bf1fadeb5c16a34503cab6a59938ce2653d887e musl-auxv.patch 51f1959bd622af26a1c3a1f4b0ad9a5bfa461057aa4cf9960c568dddf8ac47d55989c277f5d5ab5db040a04c54925a531af7a1cc767559218b408eaa6bdd7577 musl-sandbox.patch e7163ac5810ac85366cef2447412287c856e3d67c6b77f219a6e5a418b1965b98e449c409424ad0704a5bded9355dd0aec3dc4585918ce5a2ab36c079707afe2 musl-tid-caching.patch -3b7420d58d13dfc4baab5065e3017f666f51fed6de087af42a660a839d7b4444b50d1a93204322d213df36c6722eaf6b08d46d50dc374198a342da2675fafff5 net-test-no-vpython.patch -e487662b6606ea526ddd716c31e6b9ad3d61f1bee5356cd94b78a903efb3928338cbb48e3d5840b34c3b70a71e8361a228430bd50e707ad301228a7049d59e37 net-test-pyws3-py3.12.patch +92eb002718026611f5542362ad69b67f0a398ff71b3fca5c05d55cb5c6f9f29334e5e127bb4860cfaa3fba0f0d4c901e2b98808217e7dc02e254a64a5c9521aa musl-v8-monotonic-pthread-cont_timedwait.patch a250cff50d282b02ce0f28880d0a2b4fb8e7df51bc072bfeeddc561c29a7c76453dbcbc7b17b82966a7b30a31409d2555720d1dcf963e1b3fb8a2a06a6abcf46 no-execinfo.patch 0b41aeb6b212f9c3f61aa0a8d3085c9e865a2e68f3270ceec2376aab67f337ac46eaea7da36d3fd7219e2a1cb731b7aa2d3fb619a374d2b7653976b9f4f384bb no-mallinfo.patch e4c4e5bc6f828f9c883dd418c0ba01887949c29c311f76206a1ec29f620b0c0ba0452949dc2778a9c46ea066405857536964a36436a68eecf7da7952736333cf no-res-ninit-nclose.patch 6dc4d8dc92e685dace62265a1ddb3aebc558aed54d20ff6d36b030be0c48d7e84662326c31363612492574d9a03c62653cdc21a60995b97dee1d75cae86a9f9b no-sandbox-settls.patch -b75908a45ee2f4f806eec8d86fca2f51fda3531b88de48ef4539c364a40d7e2897cdaf38b715682d712648e3f43aac983055e688385f85fa7b7204ffb6d617e1 partalloc-no-tagging-arm64.patch +f2b08538ff57c50b3772a07ca91845f9d45f4a5112f608b6192d4fb5d7be48f478c0c36194d95ab7bbf933e0278e5c6d578619d8643895cdc40386eebc5b975f partalloc-no-tagging-arm64.patch 03f829a2da633533ef3fd0f287f5ec602d936a97a98b53cd2415553c2537ae9d571f35397ca7c9fb3f4b0806c300e3b189569f8d979ca132e1a2a4dae7206396 pvalloc.patch e48693e6b7aeebf69a5acbf80d9a35defe4c23835121dfeb58b051ac7c527e758a41004f4d193274fe1b01c0bfb1dbc77b09cb6a404a3fdee507a2918afb0edb temp-failure-retry.patch +914ccf649d7771f19f209ab97f99c481aebc6f66174d68e8b539f6ad4a70bc8cb0fae2df6dadbf0415958ffb3574c420fe029079dcce45f5e5add4db2e903566 yes-musl.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 +57aa81d46b9cc931092d9d9b3cb4a9859f86c183a236bc5cca6abbaeca86b82bf1b537dd9cb3412114fa4e86087c0022ee3f7e88de974d29b309e9d1714df7a5 electron_unbundle-node.patch +1b35edcf0b41e39e20c4d64dbb978bcaab8036f2fe839930709b269c50cb1321458a15b4d0013246f9e03f58f250a1e3a57ea910db1aa0adbd602a6a11ad33b9 electron_system-zlib-headers.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..cce8a23 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 @@ +@@ -568,24 +568,6 @@ } } - # TODO(crbug.com/40283598): This causes binary size growth and potentially - # other problems. -- if (default_toolchain != "//build/toolchain/cros:target") { +- # TODO(crbug.com/40284925): 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", @@ -23,91 +25,47 @@ # TODO(crbug.com/40192287): 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 @@ - ] +@@ -998,17 +980,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) { +@@ -1175,8 +1146,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 += [ +@@ -1190,8 +1161,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 @@ +@@ -1982,7 +1953,7 @@ defines = [ "_HAS_NODISCARD" ] } } else { @@ -118,7 +76,7 @@ cflags += [ "-Wextra" ] --- ./build/config/rust.gni.orig +++ ./build/config/rust.gni -@@ -178,11 +178,11 @@ +@@ -185,11 +185,11 @@ rust_abi_target = "" if (is_linux || is_chromeos) { if (current_cpu == "arm64") { @@ -133,15 +91,11 @@ } 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 -- } +@@ -198,15 +198,15 @@ + } + 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 @@ -150,15 +104,6 @@ } 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 +113,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 +130,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..84d0027 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,244 @@ 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/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 index 644f5e7..0dc5c8e 100644 --- a/backports/electron/electron_system-zlib-headers.patch +++ b/backports/electron/electron_system-zlib-headers.patch @@ -1,12 +1,10 @@ -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", - ] +--- ./electron/BUILD.gn.orig ++++ ./electron/BUILD.gn +@@ -1565,7 +1565,6 @@ + public_deps = header_groups + [ + ":node_gypi_headers", + ":node_version_header", +- ":zlib_headers", + ] } diff --git a/backports/electron/electron_unbundle-node.patch b/backports/electron/electron_unbundle-node.patch index d518d7e..d69f5ae 100644 --- a/backports/electron/electron_unbundle-node.patch +++ b/backports/electron/electron_unbundle-node.patch @@ -1,143 +1,69 @@ -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'] -+ +--- ./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 { +diff --git a/./electron/script/generate-config-gypi.py.orig b/./electron/script/generate-config-gypi.py +index b41cd7eb450..bc4098debb5 100755 +--- a/./electron/script/generate-config-gypi.py.orig ++++ b/./electron/script/generate-config-gypi.py +@@ -62,6 +62,11 @@ def main(target_file, target_cpu): + # 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+', 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-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/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-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/partalloc-no-tagging-arm64.patch b/backports/electron/partalloc-no-tagging-arm64.patch index 422fcf5..fb33151 100644 --- a/backports/electron/partalloc-no-tagging-arm64.patch +++ b/backports/electron/partalloc-no-tagging-arm64.patch @@ -3,16 +3,15 @@ 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. + # Causes all the allocations to be routed via allocator_shim.cc. Usually, --- ./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 @@ 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..5780f02 --- /dev/null +++ b/backports/fdm-materials/APKBUILD @@ -0,0 +1,27 @@ +# Contributor: Aiden Grossman +# Maintainer: +pkgname=fdm-materials +pkgver=5.2.2 +pkgrel=1 +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/freetube/APKBUILD b/backports/freetube/APKBUILD index 3ab6bf8..3d4ac08 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=2 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/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/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..49b6b8b --- /dev/null +++ b/backports/nlopt/APKBUILD @@ -0,0 +1,71 @@ +# Contributor: Anjandev Momi +# Maintainer: Celeste +maintainer="Celeste " +pkgname=nlopt +pkgver=2.8.0 +pkgrel=0 +pkgdesc="Library for nonlinear optimization" +url="https://github.com/stevengj/nlopt" +arch="all" +license="LGPL-2.1-or-later" +makedepends=" + cmake + guile-dev + python3-dev + samurai + swig + " +subpackages=" + $pkgname-dev + $pkgname-doc + $pkgname-guile + " +source="$pkgname-$pkgver.tar.gz::https://github.com/stevengj/nlopt/archive/refs/tags/v$pkgver.tar.gz" + +case "$CARCH" in +# octave unavailable on these 3 archs +s390x|riscv64|ppc64le) ;; +*) + makedepends="$makedepends octave-dev" + subpackages="$subpackages $pkgname-octave" + ;; +esac + +build() { + if [ "$CBUILD" != "$CHOST" ]; then + local 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=ON \ + -DCMAKE_BUILD_TYPE=MinSizeRel \ + $crossopts + cmake --build build +} + +check() { + ctest --test-dir build --output-on-failure +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} + +guile() { + pkgdesc="$pkgdesc (Guile bindings)" + depends="$pkgname=$pkgver-r$pkgrel guile" + + amove usr/lib/guile usr/share/guile +} + +octave() { + pkgdesc="$pkgdesc (Octave bindings)" + depends="$pkgname=$pkgver-r$pkgrel octave" + + amove usr/lib/octave usr/share/octave +} + +sha512sums=" +cb294caa5532e11ae0d22ed849705920bbae79f712144c840a5ca865ef8e6a15c6c9540c81ced0c3c05b9f44c360d50f74e235e69d893be34b7e1c5599f07c71 nlopt-2.8.0.tar.gz +" diff --git a/backports/openssl1.1-compat/APKBUILD b/backports/openssl1.1-compat/APKBUILD new file mode 100644 index 0000000..fb31eaa --- /dev/null +++ b/backports/openssl1.1-compat/APKBUILD @@ -0,0 +1,168 @@ +# Contributor: Ariadne Conill +# Maintainer: Timo Teras +pkgname=openssl1.1-compat +pkgver=1.1.1w +_abiver=${pkgver%.*} +pkgrel=1 +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";; + loongarch64) _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=/usr/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" + + amove etc + amove usr/lib/libcrypto* + amove usr/lib/engines-$_abiver +} + +_libssl() { + pkgdesc="SSL shared libraries" + + amove usr/lib/libssl* +} + +_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..8cb2f95 --- /dev/null +++ b/backports/perl-math-random-isaac-xs/APKBUILD @@ -0,0 +1,39 @@ +# Automatically generated by apkbuild-cpan, template 4 +# Contributor: Timo Teräs +# Maintainer: Celeste +maintainer="Celeste " +pkgname=perl-math-random-isaac-xs +pkgver=1.004 +pkgrel=8 +#_pkgreal is used by apkbuild-cpan to find modules at MetaCpan +_pkgreal=Math-Random-ISAAC-XS +pkgdesc="C implementation of the ISAAC PRNG algorithm" +url="https://metacpan.org/release/Math-Random-ISAAC-XS/" +arch="all" +license="Public-Domain" +depends="perl" +makedepends="perl-dev perl-module-build" +checkdepends="perl-test-nowarnings" +subpackages="$pkgname-doc" +source="https://cpan.metacpan.org/authors/id/J/JA/JAWNSY/Math-Random-ISAAC-XS-$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" + +build() { + export CFLAGS=$(perl -MConfig -E 'say $Config{ccflags}') + perl Build.PL \ + --installdirs=vendor \ + --create_packlist=0 + ./Build +} + +check() { + ./Build test +} + +package() { + ./Build install --destdir="$pkgdir" +} + +sha512sums=" +40c46b5f247f585a407ef9f36b5874d9cf03ec05963a9d92d988ebd63daf1e37b1b51308845d4596f47b5ad7203953bcb7fbb421c905b526dbe99b246ccb4d87 Math-Random-ISAAC-XS-1.004.tar.gz +" diff --git a/backports/py3-apsw/APKBUILD b/backports/py3-apsw/APKBUILD index 62e95a7..c0b8c6d 100644 --- a/backports/py3-apsw/APKBUILD +++ b/backports/py3-apsw/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Francesco Colista pkgname=py3-apsw _pkgname=apsw -pkgver=3.50.4.0 +pkgver=3.46.1.0 pkgrel=0 pkgdesc="Another Python SQLite Wrapper" url="https://github.com/rogerbinns/apsw" @@ -41,6 +41,6 @@ package() { } sha512sums=" -71db63b0a7f550c9a5d3f112d47c24953472cc6555f0b57198428997d5cf5acf73629f2da8d5d53a2473067ba19d4b655cce467a5e2267e5bd6e8cf0d9883579 py3-apsw-3.50.4.0.zip +8d24825c8346b05a99b8959ce1fd45ae5162c95b020ecc63bd3491bfd1579370a0e6b1a962f7f64a7e7e415846007e64d90b28e2065ae047e228d60b12b9cb02 py3-apsw-3.46.1.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..1971b01 --- /dev/null +++ b/backports/py3-arcus/APKBUILD @@ -0,0 +1,42 @@ +# Contributor: Aiden Grossman +# Maintainer: +pkgname=py3-arcus +# Needs to be upgraded in sync with libarcus +pkgver=5.3.0 +pkgrel=1 +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..deb152a --- /dev/null +++ b/backports/py3-colored/APKBUILD @@ -0,0 +1,31 @@ +# Maintainer: Hoang Nguyen +pkgname=py3-colored +_pyname=${pkgname/py3-/} +pkgver=1.4.4 +pkgrel=3 +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 py3-gpep517" +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() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + gpep517 install-wheel --destdir "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +d49075f97bcc220802a8a64780b4c3910acd420e7e0e82ee71659132e7a294a638b098e4e46ae54f531739f8a43cd35979e521c02bb359205a13d96e37cfe8ed colored-1.4.4.tar.gz +" diff --git a/backports/py3-dateparser/APKBUILD b/backports/py3-dateparser/APKBUILD new file mode 100644 index 0000000..17b905e --- /dev/null +++ b/backports/py3-dateparser/APKBUILD @@ -0,0 +1,65 @@ +maintainer="Hoang Nguyen " +pkgname=py3-dateparser +_pyname=${pkgname#py3-} +pkgver=1.2.0 +pkgrel=0 +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_relative_base_setting_2_en fails due to tzinfo mismatch + # test_custom_language_detect_fast_text fails due to wrong file format + _test_filter="not test_parsing_date_should_fail_using_datetime_strptime_if_locale_is_non_english \ + and not test_relative_base_setting_2_en and not test_custom_language_detect_fast_text" + + 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-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..9bca96d 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 " pkgname=py3-flask-limiter -pkgver=3.10.1 +pkgver=3.9.2 pkgrel=0 pkgdesc="Rate Limiting extension for Flask" url="https://github.com/alisaifee/flask-limiter" @@ -50,6 +50,6 @@ package() { } sha512sums=" -a0d3af6f93d4283309d6df46ddb7fed4c358bbc712c2bd9e6897362c6d086c395cb9587c3d9da283ad757b574fd8c09d909f3c4b76d02ae8aade3e61dbea6aa0 flask-limiter-3.10.1.tar.gz +69e488a641ab39c088185fabcde19ebb4cbe1683e9143efdf146163bb0254e0c4f8b4b72df407542d540394e7e3b2d7498b9c93c25ae8a8128e05e319f342318 flask-limiter-3.9.2.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..c659b1b --- /dev/null +++ b/backports/py3-fuzzywuzzy/APKBUILD @@ -0,0 +1,37 @@ +# Contributor: Galen Abell +# Maintainer: Galen Abell +pkgname=py3-fuzzywuzzy +_pyname=fuzzywuzzy +pkgver=0.18.0 +pkgrel=7 +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 py3-gpep517" +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() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + gpep517 install-wheel --destdir .testenv --prefix '' .dist/*.whl + .testenv/bin/python3 -m pytest +} + +package() { + gpep517 install-wheel --destdir "$pkgdir" \ + .dist/*.whl +} + +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..814a4bd 100644 --- a/backports/py3-limits/APKBUILD +++ b/backports/py3-limits/APKBUILD @@ -1,8 +1,8 @@ # Contributor: lauren n. liberda # Maintainer: lauren n. liberda pkgname=py3-limits -pkgver=3.14.1 -pkgrel=0 +pkgver=3.13.0 +pkgrel=1 pkgdesc="Rate limiting using various strategies and storage backends such as redis & memcached" url="https://github.com/alisaifee/limits" arch="noarch" @@ -19,16 +19,14 @@ 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" @@ -41,7 +39,7 @@ 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 \ + .testenv/bin/python3 -m pytest \ -m 'not benchmark and not etcd and not integration and not memcached' \ -k 'not aio and not Storage and not strategy' -v } @@ -52,7 +50,6 @@ package() { } sha512sums=" -f30c7ec19c2d1edad9ed77dc590ae35717efa3956a4d97e465793e1923a4af08dc9921d90ee95d3c54ce3364b867ca67a9de62c61d627e07a3f50da20bdabd0f limits-3.14.1.tar.gz -271e3b0501f9f144eda8d2e96c93b285714e339b9217385e38cdbce1f4dec88f9c949e9419f8be94885092e7977f7dca29b86b5499e9fead678b42a686c337db our-std-is-good-enough.patch -e84f4db49349a6feba0f701b9d4357c5f66d64c4a23f8ce512528b0f44b5bbef55041c02d92aae3a4cc8d5340846f9e909217beb869a5aeb49df166dd29ae9e3 tests-drop-etcd3-and-k-argument.patch +0a13d08001c2f95e559ac1be35fa8cc178ad2d41bd5bf7b7e85781a428f550c350c21b92942b5b7e45f0f4c0604e96e579c8a26b5e9ca1196e6605608721030a limits-3.13.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..fe17670 --- /dev/null +++ b/backports/py3-mapbox-earcut/APKBUILD @@ -0,0 +1,35 @@ +# Contributor: Aiden Grossman +# Maintainer: +pkgname=py3-mapbox-earcut +pkgver=1.0.1 +pkgrel=2 +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 py3-gpep517" +checkdepends="py3-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() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + gpep517 install-wheel --destdir .testenv --prefix '' .dist/*.whl + .testenv/bin/python3 -m pytest +} + +package() { + gpep517 install-wheel --destdir "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +cdb32585cbaf74c15e59af0ae70d983dd2f9bc9cfe1b59b3eadc4d442f7d962241854b589a035deae67cacd9334833b911d0981f0d417fe587348fc7d24f0c0a py3-mapbox-earcut-1.0.1.tar.gz +" diff --git a/backports/py3-numpy-stl/APKBUILD b/backports/py3-numpy-stl/APKBUILD new file mode 100644 index 0000000..1191396 --- /dev/null +++ b/backports/py3-numpy-stl/APKBUILD @@ -0,0 +1,39 @@ +# Contributor: Aiden Grossman +# Maintainer: +pkgname=py3-numpy-stl +pkgver=3.2.0 +pkgrel=0 +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 py3-gpep517" +checkdepends="py3-pytest py3-pytest-cov py3-pygments" +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://github.com/wolph/numpy-stl/archive/refs/tags/v$pkgver.tar.gz" +builddir="$srcdir/numpy-stl-$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 + gpep517 install-wheel --destdir .testenv --prefix '' .dist/*.whl + # deselected test needs xvfb-run and fails + .testenv/bin/python3 -m pytest \ + --deselect tests/test_ascii.py::test_use_with_qt_with_custom_locale_decimal_delimeter +} + +package() { + gpep517 install-wheel --destdir "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +a08053ed264dbfd629229af3db9c38deed2932b28feced56e2d4c20476f1ba85ddc80881fb82330ea3f4fff9a3f91da20db7447050da5c75f1c04455a67538dc py3-numpy-stl-3.2.0.tar.gz +" diff --git a/backports/py3-pathvalidate/APKBUILD b/backports/py3-pathvalidate/APKBUILD new file mode 100644 index 0000000..fc26a08 --- /dev/null +++ b/backports/py3-pathvalidate/APKBUILD @@ -0,0 +1,37 @@ +# Contributor: lauren n. liberda +# Maintainer: lauren n. liberda +pkgname=py3-pathvalidate +pkgver=3.2.1 +pkgrel=0 +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-setuptools_scm + 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() { + export SETUPTOOLS_SCM_PRETEND_VERSION="$pkgver" + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +094bb442258ba58fff11691f5b60976513924443247e808effbc26b9dd6c336f5f84d8e4563643b7def19d9f82170eb9ec6cd89491f9115df8d1634d2aa12206 pathvalidate-3.2.1.tar.gz +" diff --git a/backports/py3-pivy/APKBUILD b/backports/py3-pivy/APKBUILD new file mode 100644 index 0000000..6b5f0f5 --- /dev/null +++ b/backports/py3-pivy/APKBUILD @@ -0,0 +1,36 @@ +# Contributor: Aiden Grossman +# Maintainer: +pkgname=py3-pivy +pkgver=0.6.9 +pkgrel=2 +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=" +fd9587c69ad7468b771fbae59e68620f67a3c20850edadd65bf7994c1789d3444feb419e65dce34c6ee897c98eaca9f2f29f0bbfb4d1f0bbde26e4db56f74f78 py3-pivy-0.6.9.tar.gz +" diff --git a/backports/py3-pyinstrument/APKBUILD b/backports/py3-pyinstrument/APKBUILD new file mode 100644 index 0000000..e4ab2cf --- /dev/null +++ b/backports/py3-pyinstrument/APKBUILD @@ -0,0 +1,50 @@ +# Contributor: Aiden Grossman +# Maintainer: Celeste +maintainer="Celeste " +pkgname=py3-pyinstrument +pkgver=4.7.3 +pkgrel=0 +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-flaky + py3-greenlet + py3-pytest + py3-pytest-asyncio + py3-trio + " +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://github.com/joerick/pyinstrument/archive/refs/tags/v$pkgver.tar.gz" +builddir="$srcdir/pyinstrument-$pkgver" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + [ -d "pyinstrument" ] && mv -v pyinstrument pyinstrument.src + + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + + # test_cmdline.py tries to run "pyinstrument" executable + PATH="$builddir/.testenv/bin:$PATH" .testenv/bin/python3 -m pytest +} + +package() { + python3 -m installer -d "$pkgdir" .dist/*.whl +} + +sha512sums=" +24feac08a9726379b749f391bdb6ddbca6d3631cf3515d3ead85ace7a96f213bf60e2cd4d4f3c7cade68b5e481b4bfd562482817befe6322579101a8d91add66 py3-pyinstrument-4.7.3.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-rtree/APKBUILD b/backports/py3-rtree/APKBUILD new file mode 100644 index 0000000..491e8e9 --- /dev/null +++ b/backports/py3-rtree/APKBUILD @@ -0,0 +1,39 @@ +# Contributor: Alex Yam +# Maintainer: Alex Yam +pkgname=py3-rtree +_pkgname=rtree +pkgver=1.1.0 +pkgrel=2 +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 py3-gpep517" +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() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + gpep517 install-wheel --destdir .testenv --prefix '' .dist/*.whl + .testenv/bin/python3 -m pytest -v --doctest-modules rtree tests +} + +package() { + gpep517 install-wheel --destdir "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +97a87027e49520f12cb86444ee8a9795fabeec6d8f0e3e869f2714df8f7c649ced1374385852af0ce7d7eb91e5a2cb464a4330807be15d538dc0a4d8de7b7ca2 py3-rtree-1.1.0.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..3cfbc91 --- /dev/null +++ b/backports/py3-svgpath/APKBUILD @@ -0,0 +1,41 @@ +# Contributor: Aiden Grossman +# Maintainer: Celeste +maintainer="Celeste " +pkgname=py3-svgpath +pkgver=6.3 +pkgrel=3 +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() { + 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=" +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..7087c8d --- /dev/null +++ b/backports/py3-trimesh/APKBUILD @@ -0,0 +1,65 @@ +# Contributor: Aiden Grossman +# Maintainer: +pkgname=py3-trimesh +pkgver=3.22.1 +pkgrel=2 +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/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..0bfb575 100644 --- a/backports/signal-desktop/APKBUILD +++ b/backports/signal-desktop/APKBUILD @@ -2,14 +2,14 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=signal-desktop -pkgver=7.76.0 -pkgrel=1 +pkgver=7.34.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 +_llvmver=18 depends=" electron font-barlow @@ -29,6 +29,7 @@ makedepends=" cmake crc32c-dev dav1d-dev + double-conversion-dev electron-dev electron-tasje ffmpeg-dev @@ -36,18 +37,19 @@ makedepends=" glib-dev gn jsoncpp-dev + libavif-dev libjpeg-turbo-dev libepoxy-dev + libevent-dev libsecret-dev libvpx-dev libwebp-dev libxml2-dev - lld + lld$_llvmver llvm$_llvmver-dev mesa-dev nodejs npm - pnpm openh264-dev openssl-dev opus-dev @@ -56,7 +58,6 @@ makedepends=" pulseaudio-dev py3-setuptools python3 - re2-dev samurai sqlcipher-dev vips-dev @@ -65,37 +66,31 @@ makedepends=" options="net !check" # use _check_depends to validate this -_libsignalver=0.83.0 -_ringrtcver=2.59.0 -_webrtcver=7339c -_sqlcipherver=2.4.4 +_libsignalver=0.60.2 +_ringrtcver=2.48.7 +_webrtcver=6723a +_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://github.com/signalapp/Signal-FTS5-Extension/archive/refs/tags/v$_stokenizerver/stokenizer-$_stokenizerver.tar.gz 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 ringrtc-webrtc-renamed.patch - ringrtc-use-sh.patch webrtc-shared-libs.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,35 +106,30 @@ 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..." +_check_depends() { # _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 + # _stokenizerver: follow @signalapp/better-sqlite3 (on version in package.json) -> deps/download.js -> TOKENIZER_VERSION - 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 _libsignalver=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Desktop/v$pkgver/package-lock.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-lock.json | grep "@signalapp/ringrtc\": \"" | awk '{print $2}' | tr -d ',' | tr -d '"' | head -n 1) + local _bsqlitever=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Desktop/v$pkgver/package-lock.json | grep "@signalapp/better-sqlite3\": \"" | 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) + local _extensionver=$(curl --silent https://raw.githubusercontent.com/signalapp/better-sqlite3/v$_bsqlitever/deps/download.js | grep "const EXTENSION_VERSION" | awk '{print $4}' | tr -d "'" | tr -d ';' | head -n 1) + local _stokenizerver=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Sqlcipher-Extension/refs/tags/v$_extensionver/Cargo.lock | sed -n "/^name = \"signal-tokenizer\"$/,/^$/p" | awk -F ' = ' '{if($1=="version"){print $2}}' | tr -d '"') - sed -i \ - -e "s|^_libsignalver=.*|_libsignalver=$_libsignalver|" \ - -e "s|^_ringrtcver=.*|_ringrtcver=$_ringrtcver|" \ - -e "s|^_webrtcver=.*|_webrtcver=$_webrtcver|" \ - -e "s|^_sqlcipherver=.*|_sqlcipherver=$_sqlcipherver|" \ - $APKBUILD + echo _libsignalver=$_libsignalver + echo _ringrtcver=$_ringrtcver + echo _webrtcver=$_webrtcver + echo _stokenizerver=$_stokenizerver } # webrtc only, the other dependencies are fine with tarballs @@ -193,21 +183,14 @@ target_cpu_only = True 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 + for i in libsignal-$_libsignalver ringrtc-$_ringrtcver webrtc-$_webrtcver Signal-FTS5-Extension-$_stokenizerver; 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 "Installing signal-desktop JS dependencies" - pnpm install --ignore-scripts + npm ci --ignore-scripts - # remove shipped fonts for system-provided (part 1) - rm -rf fonts/ + default_prepare ( cd "$builddir"/webrtc @@ -216,6 +199,7 @@ prepare() { brotli crc32c dav1d + double-conversion ffmpeg flatbuffers fontconfig @@ -225,7 +209,9 @@ prepare() { icu jsoncpp libaom + libavif libdrm + libevent libjpeg libpng libsecret @@ -259,9 +245,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 @@ -285,13 +268,10 @@ prepare() { ) ( - cd "$builddir"/node-sqlcipher + cd "$builddir"/Signal-FTS5-Extension - # 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 ) ( @@ -305,11 +285,14 @@ prepare() { cd "$builddir"/libsignal/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() { @@ -330,9 +313,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 @@ -385,7 +365,8 @@ build() { cd "$builddir"/libsignal/node msg "Building libsignal" - npm_config_nodedir=/usr/include/electron/node_headers python3 build_node_bridge.py + node-gyp configure --nodedir=/usr/include/electron/node_headers --build-from-source + 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 @@ -398,73 +379,58 @@ build() { ) ( - cd "$builddir"/node-sqlcipher + cd "$builddir"/Signal-FTS5-Extension - ( - 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 + npm run build:acknowledgments + npm exec 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 + npm run build:dev # purge non-production deps - pnpm prune --ignore-scripts --prod + npm prune --ignore-scripts --omit=dev # use our libsignal rm -rf node_modules/@signalapp/libsignal-client/ - cp -r "$builddir"/libsignal/node/ node_modules/@signalapp/libsignal-client + mv libsignal/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 ringrtc/src/node/ node_modules/@signalapp/ringrtc - # use our sqlcipher - rm -rf node_modules/@signalapp/sqlcipher/ - cp -r "$builddir"/node-sqlcipher node_modules/@signalapp/sqlcipher + mkdir node_modules/@signalapp/better-sqlite3/tokenizer + mv Signal-FTS5-Extension/target/release/libsignal_tokenizer.a node_modules/@signalapp/better-sqlite3/tokenizer/ + mv Signal-FTS5-Extension/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 + npm run 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 @@ -473,7 +439,7 @@ package() { # 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"/signal-desktop.sh "$pkgdir"/usr/bin/signal-desktop + install -Dm755 "$srcdir"/signal-desktop "$pkgdir"/usr/bin/signal-desktop while read -r size; do install -Dm644 icons/$size.png "$pkgdir"/usr/share/icons/hicolor/$size/apps/$pkgname.png @@ -481,25 +447,19 @@ 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 +30e06721b01e580414c5e57b63350fc42edbe837b0a60a9cd100bc6ab1758fa6fd5744dc3a35d991db62f363eab791c45b43e1d9d5c81af9e67685114ae2e630 Signal-Desktop-7.34.0.tar.gz +26780a0a6a529cee18f5c3b58f0395c6b5b630dbc8d2bbaa345dd7dd319a0e8548575c915dc16de6ac5d421fffdbe898f2dedb1fa3b4eab5d26debdfc1da515b libsignal-0.60.2.tar.gz +e5e5ab27dc3bd37ef577c248d450e70fa11e72bdfab00fef233aad84d3d8aa3434166c03267f6b95b69d593e9da2f37017b5b7a0913f68499f387354742ba50a ringrtc-2.48.7.tar.gz +64eed5c2a6f5a505d014bc4fa80e15b21103df1ea27825eaa1dfecc23c269f198a7e98472f29de7cae4ac7fa4fede6e837c27494b8ec4d03e36b85b029c64831 webrtc-6723a.tar.zst +84a1f2fc29262a12842e94698d124a85b823128e72a493b0be8ea92fbb72c5c268499f4a6827cdedaae06ec73cce4039a39fe5c5d536cbef330e59ba0183da28 stokenizer-0.2.1.tar.gz 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 +cee74edb504ee5ae685e8a449ac35fabf949c33bfee5905778f850c3b18e17f9ae9bd501c89a7fd2c9c81a5bb2b0af0c0b3c72e32128603b3923c32d2a493ce9 signal-use-system-sqlcipher.patch +152435231cdcf52a17a9e24aadf95d77511258e818172941ba074a73a90a541f0136feb58868674f2bcb19191a6d12933fe6cd5baf3ee99e508915c72523163b signal-disable-updates.patch +d50eb5724502df9ea4d795db8cfc27af767c25168d7db2af512e615be7cc2ca290210a9ae78e1abb153c0198677e858ad3d74926c958099d0319295e7d9e7f1d signal-update-links.patch +bfc8acdd13aa48d29c7657311733cc9d33c4899782efbd1ef6d25ad1698be4de7cc67e829324bc0309715d69ae37ea9f782cf54887317e817213e110d73d68e7 signal-show-window-please.patch +10284e0d86ab88de161ae689871082194f689ce416f3ebada8991d5db707994ea1cb8b4212756dd93ba5a3469964050988220f18afc37e38f3404a6e17ec8caf ringrtc-webrtc-renamed.patch +98a7e4df27c3ed56c5968ebc3ae8e08bfb54362d0c910f9af1d414079a6d5fe0f18aa570ae3c38042f4691af6a130cb3ff689625e26a3987720dd319a5f587b1 webrtc-shared-libs.patch +fe78cdc58c18826fc4227cc8e9377980766229390544578f6a1a6f7322bc3243c066963b589323dbfe4f2bfd37f8859ad84f63cb3783317892e5ae3652270a3a webrtc-compiler.patch +48ab5c733e643eaff08ccbe839086bebbb68d397984ad7c5c5b68df8071f75d2dfe92c3f52d9fbf9b81754934bdfa8a67c69addd476ce4265b978592fb4ff9bd 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/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..6f8a2b3 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() { +--- ./ringrtc/src/rust/build.rs.orig ++++ ./ringrtc/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-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..73c94af 100644 --- a/backports/signal-desktop/signal-show-window-please.patch +++ b/backports/signal-desktop/signal-show-window-please.patch @@ -1,7 +1,7 @@ -diff --git a/Signal-Desktop/app/main.ts.orig b/Signal-Desktop/app/main.ts +diff --git a/app/main.ts.orig b/app/main.ts index aa1bec8..bd7c1d5 100644 ---- a/Signal-Desktop/app/main.ts.orig -+++ b/Signal-Desktop/app/main.ts +--- a/app/main.ts.orig ++++ b/app/main.ts @@ -690,7 +690,7 @@ async function createWindow() { : DEFAULT_HEIGHT; 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 index 576ee66..22b2e2f 100644 --- a/backports/signal-desktop/signal-use-system-sqlcipher.patch +++ b/backports/signal-desktop/signal-use-system-sqlcipher.patch @@ -1,25 +1,26 @@ -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 @@ +diff --git a/node_modules/@signalapp/better-sqlite3/binding.gyp.orig b/node_modules/@signalapp/better-sqlite3/binding.gyp +index c370c30b309..bf0207e6fec 100644 +--- a/node_modules/@signalapp/better-sqlite3/binding.gyp.orig ++++ b/node_modules/@signalapp/better-sqlite3/binding.gyp +@@ -7,7 +7,16 @@ 'targets': [ { - 'target_name': 'node_sqlcipher', -+ 'include_dirs': [ + 'target_name': 'better_sqlite3', +- 'dependencies': ['deps/sqlite3.gyp:sqlite3'], ++ 'include_dirs': [ + '/usr/include/sqlcipher', ++ 'tokenizer', + ], + 'link_settings': { + 'libraries': [ + '-lsqlcipher', ++ ' 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..e07e239 --- /dev/null +++ b/backports/signal-desktop/webrtc-gcc13.patch @@ -0,0 +1,20 @@ +--- ./webrtc/rtc_base/system/file_wrapper.h.orig ++++ ./webrtc/rtc_base/system/file_wrapper.h +@@ -13,6 +13,7 @@ + + #include + #include ++#include + + #include + +--- ./webrtc/modules/audio_coding/neteq/reorder_optimizer.cc.orig ++++ ./webrtc/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 index 04b55c0..f4bf714 100644 --- a/backports/signal-desktop/webrtc-shared-libs.patch +++ b/backports/signal-desktop/webrtc-shared-libs.patch @@ -18,10 +18,10 @@ # Only the root target and the test should depend on this. visibility = [ "//:default", -@@ -530,7 +530,6 @@ if (!build_with_chromium) { +@@ -472,7 +472,6 @@ + ] sources = [] - - complete_static_lib = true suppressed_configs += [ "//build/config/compiler:thin_archive" ] defines = [] @@ -42,12 +42,12 @@ diff --git a/webrtc/third_party/googletest/BUILD.gn.orig b/webrtc/third_party/go 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") { +@@ -133,7 +133,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) { + if (is_nacl || !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 @@ -62,17 +62,3 @@ index 57ee790..ba1d297 100644 # 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-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..359bfb2 --- /dev/null +++ b/backports/soqt/APKBUILD @@ -0,0 +1,30 @@ +# Contributor: Aiden Grossman +# Maintainer: +pkgname=soqt +pkgver=1.6.0 +pkgrel=1 +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..7badd09 --- /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 --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/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/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/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/freecad/APKBUILD b/user/freecad/APKBUILD new file mode 100644 index 0000000..30c9eb5 --- /dev/null +++ b/user/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/user/freecad/missing-include-cstdint.patch b/user/freecad/missing-include-cstdint.patch new file mode 100644 index 0000000..363a706 --- /dev/null +++ b/user/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/user/freecad/no-execinfo.patch b/user/freecad/no-execinfo.patch new file mode 100644 index 0000000..3e1c39c --- /dev/null +++ b/user/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/user/freecad/no-workaround-spnav.patch b/user/freecad/no-workaround-spnav.patch new file mode 100644 index 0000000..ee4fead --- /dev/null +++ b/user/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/user/freecad/numpy-1.20.patch b/user/freecad/numpy-1.20.patch new file mode 100644 index 0000000..20f4b41 --- /dev/null +++ b/user/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/user/freecad/opencascade-7.8.0.patch b/user/freecad/opencascade-7.8.0.patch new file mode 100644 index 0000000..582fbde --- /dev/null +++ b/user/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/user/freecad/resourceDirectory.patch b/user/freecad/resourceDirectory.patch new file mode 100644 index 0000000..a2a16d1 --- /dev/null +++ b/user/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/user/freecad/tests.patch b/user/freecad/tests.patch new file mode 100644 index 0000000..4b63a20 --- /dev/null +++ b/user/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/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/looking-glass/APKBUILD b/user/looking-glass/APKBUILD new file mode 100644 index 0000000..fc66935 --- /dev/null +++ b/user/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/user/looking-glass/looking-glass.post-deinstall b/user/looking-glass/looking-glass.post-deinstall new file mode 100644 index 0000000..f193065 --- /dev/null +++ b/user/looking-glass/looking-glass.post-deinstall @@ -0,0 +1,2 @@ +#!/bin/sh +exec /usr/sbin/akms uninstall kvmfr diff --git a/user/looking-glass/missing-includes.patch b/user/looking-glass/missing-includes.patch new file mode 100644 index 0000000..635752c --- /dev/null +++ b/user/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/user/looking-glass/module_1075-fix-build-linux64.patch b/user/looking-glass/module_1075-fix-build-linux64.patch new file mode 100644 index 0000000..bf594b5 --- /dev/null +++ b/user/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/user/looking-glass/module_1124-fix-build-linux610.patch b/user/looking-glass/module_1124-fix-build-linux610.patch new file mode 100644 index 0000000..c194c78 --- /dev/null +++ b/user/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/user/looking-glass/obs-plugins-lib.patch b/user/looking-glass/obs-plugins-lib.patch new file mode 100644 index 0000000..1390adb --- /dev/null +++ b/user/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/user/looking-glass/werror.patch b/user/looking-glass/werror.patch new file mode 100644 index 0000000..436419f --- /dev/null +++ b/user/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/user/mathjax2/APKBUILD b/user/mathjax2/APKBUILD new file mode 100644 index 0000000..ceb2b15 --- /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=1 +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..9a6e7ab 100644 --- a/unmaintained/paperless-ngx/APKBUILD +++ b/user/paperless-ngx/APKBUILD @@ -9,7 +9,7 @@ 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" +# arch="noarch !s390x !armhf !ppc64le" install="$pkgname.post-install $pkgname.post-upgrade $pkgname.pre-install" depends=" file 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 index 51459a5..a815212 100644 --- a/user/papermc-plugin-essentialsx/APKBUILD +++ b/user/papermc-plugin-essentialsx/APKBUILD @@ -1,13 +1,11 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=papermc-plugin-essentialsx -pkgver=2.21.1 -_gittag=$pkgver +pkgver=2.21.0_pre151 +_gittag=f2af9528b0f99f2ff121dda2607e51d391a2a8bf 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' +arch='noarch' url="https://essentialsx.net/" license="GPL-3.0" depends=" @@ -77,5 +75,5 @@ xmpp() { } sha512sums=" -2634a909e4fced837acfd89e0972511da418a9ab3d648f4eb466688b779c7d4215aa25ed891504bc39805d292f1ebf72bb71077c0354117fdaf28ba032483262 papermc-plugin-essentialsx-2.21.1.tar.gz +5fabf6b2091f7182ff23ca02e2f93ff22527668d55bbf60977ad414881c201bdc4608fe3618ca0d1312beb8fe8768f36cd792099817a0205f791ab2f9b212e04 papermc-plugin-essentialsx-f2af9528b0f99f2ff121dda2607e51d391a2a8bf.tar.gz " diff --git a/user/papermc-plugin-luckperms/APKBUILD b/user/papermc-plugin-luckperms/APKBUILD index 6b7a4e4..4de9ddb 100644 --- a/user/papermc-plugin-luckperms/APKBUILD +++ b/user/papermc-plugin-luckperms/APKBUILD @@ -5,9 +5,7 @@ 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' +arch='noarch' url="https://github.com/lucko/LuckPerms" license="MIT" depends="papermc>=1.8.8" diff --git a/user/papermc-plugin-vault/APKBUILD b/user/papermc-plugin-vault/APKBUILD index 21897eb..dbb0be1 100644 --- a/user/papermc-plugin-vault/APKBUILD +++ b/user/papermc-plugin-vault/APKBUILD @@ -4,8 +4,7 @@ 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' +arch='noarch' url="https://github.com/MilkBowl/Vault" license="MIT" depends="papermc>=1.8.8" diff --git a/user/papermc-plugin-worldedit/APKBUILD b/user/papermc-plugin-worldedit/APKBUILD index f487664..5634b03 100644 --- a/user/papermc-plugin-worldedit/APKBUILD +++ b/user/papermc-plugin-worldedit/APKBUILD @@ -1,21 +1,16 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=papermc-plugin-worldedit -pkgver=7.3.13 +pkgver=7.3.9 _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' +arch='noarch !aarch64' 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 - " +source="$pkgname-$pkgver.tar.gz::https://github.com/EngineHub/WorldEdit/archive/refs/tags/$pkgver.tar.gz" builddir="$srcdir"/WorldEdit-$pkgver build() { @@ -27,9 +22,8 @@ check() { } package() { - install -Dm644 "$builddir"/worldedit-bukkit/build/libs/worldedit-bukkit-$pkgver-dist.jar "$pkgdir/var/lib/papermc/plugins/WorldEdit.jar" + install -Dm644 "$builddir"/worldedit-bukkit/build/libs/worldedit-bukkit-$pkgver.jar "$pkgdir/var/lib/papermc/plugins/WorldEdit.jar" } sha512sums=" -dbea1e2ff5b41ad25f8ddc5ae5456f9b7337d406cb4791fb3718b38bfbb94b0d8ba9fc7e2cd5c0d94c3c1845a35e68a87d89c0f147f9d988dd3fc3e375144198 papermc-plugin-worldedit-7.3.13.tar.gz -e36ac06da26e8817c7c666c972a09cbdba0fca8e0a511e53c5650d46ef1ee9a44d783900ed0afb39faab5dc718bf68e26d8c9b310ceedffa5d11bd15880aaa88 papermc-fix-build.patch +35eb83dfcd192884a86f9bec3cbe586af6141b8c10461937b2ef112bfb4d64f5f7c6e950108a7893dc5b1054f1d0206f74ec6b4702481c0da69bf89627dbfb06 papermc-plugin-worldedit-7.3.9.tar.gz " 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 index ba13b1d..4fb9957 100644 --- a/user/papermc-plugin-worldguard/APKBUILD +++ b/user/papermc-plugin-worldguard/APKBUILD @@ -5,8 +5,7 @@ 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' +arch='noarch' url="https://github.com/EngineHub/WorldGuard" license="GPL-3.0" depends="papermc>=1.17.0" diff --git a/user/papermc/APKBUILD b/user/papermc/APKBUILD index f4a7f7b..23930f7 100644 --- a/user/papermc/APKBUILD +++ b/user/papermc/APKBUILD @@ -1,12 +1,11 @@ # Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) pkgname=papermc -pkgver=1.21.7 +pkgver=1.21.3 _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' +arch='noarch' url="https://papermc.io/" license='custom' depends='openjdk21-jdk screen sudo bash gawk sed netcat-openbsd' @@ -32,7 +31,7 @@ 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 + install -Dm644 "$builddir"/build/libs/paper*.jar "$pkgdir"/var/lib/$pkgname/$pkgver.jar ln -s $pkgver.jar "$pkgdir"/var/lib/$pkgname/server.jar # Link the log files @@ -44,7 +43,7 @@ package() { chmod g+ws "$pkgdir"/var/lib/$pkgname } sha512sums=" -90c3017f7e4031816f6d4e30612a88d7b15d9e99cfb4e887b868e3d0d55ec5db0e9e71dc433dd399959da9b099e7fc4fd3768635ccabcce84d1adfc48837309a papermc-1.21.7.tar.zst +630c0fafd53082bec3992234f7422c4714c30ad0fac240c6dc80091fc7d49b57bc2cb7365366ac015d2a9217c4fd561f0649f738cb0d90ea7a7b6355f9839ff6 papermc-1.21.3.tar.zst c5d1bf85ceb74162aaaf2bcd2d06dc2e3dd2e37c39f0cee2be7c8dbff9970a6aff1e48a43e6d1e83e6a0ac610bd89f62b1279bf27b64afa88d9831a36aebbd3e papermc.initd 9b8e267428731ee9255f82a93f1e8674d7e917a0f154bd395cd2280a49aa248a4b8427520b08dbb4b3a74a5471dac0e439eedc8ab94bf2e53bb8d411d2d8a789 papermc.conf 943ba0d4c10173246bdc6497dcedd54da0788f966841c8d3381398711d79f8d5eb07a24ce28f519b6f24f59d99fa9e74bc6bb882059f343df4eeda5de3660ac7 papermc.sh diff --git a/user/pinenote-dbus-service/APKBUILD b/user/pinenote-dbus-service/APKBUILD new file mode 100644 index 0000000..0312e65 --- /dev/null +++ b/user/pinenote-dbus-service/APKBUILD @@ -0,0 +1,34 @@ +# Maintainer: Petr Hodina +pkgname=pinenote-dbus-service +pkgver=0.2.2_pre5 +_gittag=0.2.2-dev5 +pkgrel=0 +pkgdesc="Dbus daemon for controlling driver aspects on Pine64 Pinenote" +url="https://github.com/m-weigand/pinenote_dbus_service" +arch="aarch64" +license="MIT" +makedepends="cargo" +depends="dbus-dev" +source=" + pinenote-dbus-service-$_gittag.tar.gz::https://github.com/m-weigand/pinenote_dbus_service/archive/refs/tags/v$_gittag.tar.gz + pinenote.initd +" + +builddir="$srcdir/pinenote_dbus_service-$_gittag" + +build() { + cargo build --release --locked +} + +package() { + cargo install --path . --root="$pkgdir/usr" + install -Dm644 dbus_security_configuration/pinenote.conf -t "$pkgdir"/usr/share/dbus-1/system.d/ + install -Dm755 "$srcdir"/pinenote.initd $pkgdir/etc/init.d/pinenote + rm "$pkgdir"/usr/.crates.toml + rm "$pkgdir"/usr/.crates2.json +} + +sha512sums=" +10cf05f9e1e8affec97b532611a9bffb86928cabe4eb9bd321b66e8dba340e6a7916fa0c8286f81300bfa655d5596bba09f0316abcafa6c55128823c78acb807 pinenote-dbus-service-0.2.2-dev5.tar.gz +362c20218610e7a5349eef40d54463a05906e258157e590ad1635591a548ddc60050142cfab41a0423797182e5ae392a7fe6476fc71b9c01cece384351e6f148 pinenote.initd +" diff --git a/user/pinenote-dbus-service/pinenote.initd b/user/pinenote-dbus-service/pinenote.initd new file mode 100644 index 0000000..0301c53 --- /dev/null +++ b/user/pinenote-dbus-service/pinenote.initd @@ -0,0 +1,10 @@ +#!/sbin/openrc-run + +description="Launch DBus service for driver aspects" +command="/usr/bin/pinenote_dbus_service" +command_background=yes +pidfile="/run/${RC_SVCNAME}.pid" + +depend() { + need dbus +} 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..4bc816e 100644 --- a/user/rmfakecloud/APKBUILD +++ b/user/rmfakecloud/APKBUILD @@ -2,13 +2,12 @@ # Contributor: Antoine Martin (ayakael) pkgname=rmfakecloud -pkgver=0.0.27 +pkgver=0.0.19 _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" @@ -38,7 +37,7 @@ package() { install -Dm755 "$srcdir"/rmfakecloud.openrc "$pkgdir"/etc/init.d/rmfakecloud } sha512sums=" -b215295c8779f9820e9751e5cbfb8804d6cdeb0d71ffaa60d46fd803760e63227352f55a8b5a2e75d990b20a6a19c43a4ffaa03a1857e6fb37990a8b191a3ea2 rmfakecloud-0.0.27.tar.gz +55948ede5f8a4cc9e74c9c68f83d14dec4950f23da5ef053f3ae708edf2643f64e5736abfe63cbf6700e5277adff7167ce0f228a8241169261f4ce59e2815a35 rmfakecloud-0.0.19.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 100% rename from unmaintained/rstudio-desktop/APKBUILD rename to user/rstudio-desktop/APKBUILD 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..62a8a34 --- /dev/null +++ b/user/sane/APKBUILD @@ -0,0 +1,163 @@ +# 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/" +# FTBFS +# 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..6ae8824 100644 --- a/user/tandoor-recipes/APKBUILD +++ b/user/tandoor-recipes/APKBUILD @@ -4,8 +4,8 @@ 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" +# FTBFS +# arch="noarch" url="https://github.com/TandoorRecipes/recipes" license="AGPL-3.0-only" depends=" 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/velocity/APKBUILD b/user/velocity/APKBUILD new file mode 100644 index 0000000..5a920d5 --- /dev/null +++ b/user/velocity/APKBUILD @@ -0,0 +1,51 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) +pkgname=velocity +pkgver=3.4.0_pre459 +_gittag=00b68859fffa31bc5bd66338e339131ddbb50ff5 +pkgrel=0 +pkgdesc="The modern, next-generation Minecraft server proxy." +arch='noarch' +url="https://papermc.io/software/velocity" +license='GPL-3.0-only' +depends='openjdk21-jdk screen sudo bash gawk sed netcat-openbsd' +makedepends="gradle" +options="!check" +subpackages="$pkgname-openrc" +builddir="$srcdir"/Velocity-$_gittag +source=" + $pkgname-$_gittag.tar.gz::https://github.com/PaperMC/Velocity/archive/$_gittag.tar.gz + velocity.initd + velocity.conf + velocity.sh +" + +build() { + ./gradlew --parallel build +} + +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"/build/libs/velocity*.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=" +856d3b0efdc7199b922aae07cf33259af74823dd95fce8deb0fd54db0d416b935330487568989ec576616fac562c3e9bb8626c79c84ce2e4060225c50ec161ae velocity-00b68859fffa31bc5bd66338e339131ddbb50ff5.tar.gz +c5d1bf85ceb74162aaaf2bcd2d06dc2e3dd2e37c39f0cee2be7c8dbff9970a6aff1e48a43e6d1e83e6a0ac610bd89f62b1279bf27b64afa88d9831a36aebbd3e velocity.initd +9b8e267428731ee9255f82a93f1e8674d7e917a0f154bd395cd2280a49aa248a4b8427520b08dbb4b3a74a5471dac0e439eedc8ab94bf2e53bb8d411d2d8a789 velocity.conf +943ba0d4c10173246bdc6497dcedd54da0788f966841c8d3381398711d79f8d5eb07a24ce28f519b6f24f59d99fa9e74bc6bb882059f343df4eeda5de3660ac7 velocity.sh +" diff --git a/user/velocity/velocity.conf b/user/velocity/velocity.conf new file mode 100644 index 0000000..3b840eb --- /dev/null +++ b/user/velocity/velocity.conf @@ -0,0 +1,28 @@ +# THIS IS THE CONFIGURATION FILE FOR THE MANAGING SCRIPT NOT FOR THE ACTUAL SERVER +# Variables are interpreted in bash. Simply using bash-syntax is sufficient. + +# General parameters +SERVER_ROOT="/var/lib/papermc" +BACKUP_DEST="/var/lib/papermc/backup" +BACKUP_PATHS="world" # World paths separated by spaces relative to SERVER_ROOT +KEEP_BACKUPS="10" +GAME_USER="craftbukkit" +MAIN_EXECUTABLE="papermc_server.jar" +SESSION_NAME="papermc" + +# System parameters for java +# -Xms sets the intial heap size (must be a multiple of 1024 and greater than 2MB, no spaces!) +# -Xmx sets the maximum heap size (must be a multiple of 1024 and greater than 2MB, no spaces!) +# -XX:ParallelGCThreads defines the number of threads the server may use +SERVER_START_CMD="java -Xms512M -Xmx1024M -XX:ParallelGCThreads=1 -jar './${MAIN_EXECUTABLE}' nogui" + +# System parameters for the actual game server +# Describes whether a daemon process which stops the server if it is not used by a player +# within IDLE_IF_TIME seconds should be started. The GAME_PORT is not inhereted to the server! +IDLE_SERVER=false # true or false +# Ensure that if SESSION_NAME is passed through the command line and therefore set to read only by the script, +# IDLE_SESSION_NAME gets altered according to the command line and not the configurtion file, hence invoke the variable +IDLE_SESSION_NAME="idle_server_${SESSION_NAME}" +GAME_PORT="25565" # used to listen for incoming connections when the server is down +CHECK_PLAYER_TIME="30" # in seconds +IDLE_IF_TIME="1200" # in seconds diff --git a/user/velocity/velocity.initd b/user/velocity/velocity.initd new file mode 100644 index 0000000..e1cad4d --- /dev/null +++ b/user/velocity/velocity.initd @@ -0,0 +1,32 @@ +#!/sbin/openrc-run +# Distributed under the terms of the GNU General Public License, v2 or later + +PAPERMC_HOME=${PAPERMC_HOME:-/var/lib/${SVCNAME}} +PAPERMC_USER=${PAPERMC_USER:-${SVCNAME}} +PIDFILE=/run/papermc/papermc.pid + +depend() { + after net +} + +start() { + checkpath -dq -o papermc:papermc -m 755 /run/papermc/ + ebegin "Starting ${SVCNAME}" + start-stop-daemon \ + --start --user "${PAPERMC_USER}" --name papermc \ + --env HOME="${PAPERMC_HOME}" --exec /usr/bin/papermc \ + --pidfile="${PIDFILE}" \ + -- \ + start + eend $? +} + +stop() { + ebegin "Stopping ${SVCNAME}" + start-stop-daemon --stop --user "${PAPERMC_USER}" \ + --pidfile "${PIDFILE}" \ + --wait 15000 \ + --progress + eend $? +} + diff --git a/user/velocity/velocity.post-install b/user/velocity/velocity.post-install new file mode 100755 index 0000000..297423e --- /dev/null +++ b/user/velocity/velocity.post-install @@ -0,0 +1,9 @@ +_game="papermc" +_user="craftbukkit" +_server_root="/var/lib/papermc" + + echo "The world data is stored under ${_server_root} and the server runs as ${_user} user to increase security." + echo "Use the ${_game} script under /usr/bin/${_game} to start, stop or backup the server." + echo "Adjust the configuration file under /etc/conf.d/${_game} to your liking." + echo "For the server to start you have to accept the EULA in ${_server_root}/eula.txt !" + echo "The EULA file is generated after the first server start." diff --git a/user/velocity/velocity.sh b/user/velocity/velocity.sh new file mode 100755 index 0000000..cb9486a --- /dev/null +++ b/user/velocity/velocity.sh @@ -0,0 +1,495 @@ +#!/bin/bash + +# The actual program name +declare -r myname="papermc" +declare -r game="papermc" + +# General rule for the variable-naming-schema: +# Variables in capital letters may be passed through the command line others not. +# Avoid altering any of those later in the code since they may be readonly (IDLE_SERVER is an exception!) + +# You may use this script for any game server of your choice, just alter the config file +[[ -n "${SERVER_ROOT}" ]] && declare -r SERVER_ROOT=${SERVER_ROOT} || SERVER_ROOT="/srv/${game}" +[[ -n "${BACKUP_DEST}" ]] && declare -r BACKUP_DEST=${BACKUP_DEST} || BACKUP_DEST="/srv/${game}/backup" +[[ -n "${BACKUP_PATHS}" ]] && declare -r BACKUP_PATHS=${BACKUP_PATHS} || BACKUP_PATHS="world" +[[ -n "${BACKUP_FLAGS}" ]] && declare -r BACKUP_FLAGS=${BACKUP_FLAGS} || BACKUP_FLAGS="-z" +[[ -n "${KEEP_BACKUPS}" ]] && declare -r KEEP_BACKUPS=${KEEP_BACKUPS} || KEEP_BACKUPS="10" +[[ -n "${GAME_USER}" ]] && declare -r GAME_USER=${GAME_USER} || GAME_USER="papermc" +[[ -n "${MAIN_EXECUTABLE}" ]] && declare -r MAIN_EXECUTABLE=${MAIN_EXECUTABLE} || MAIN_EXECUTABLE="papermc_server.jar" +[[ -n "${SESSION_NAME}" ]] && declare -r SESSION_NAME=${SESSION_NAME} || SESSION_NAME="${game}" + +# Command and parameter declaration with which to start the server +[[ -n "${SERVER_START_CMD}" ]] && declare -r SERVER_START_CMD=${SERVER_START_CMD} || SERVER_START_CMD="java -Xms512M -Xmx1024M -XX:ParallelGCThreads=1 -jar './${MAIN_EXECUTABLE}' nogui" + +# System parameters for the control script +[[ -n "${IDLE_SERVER}" ]] && tmp_IDLE_SERVER=${IDLE_SERVER} || IDLE_SERVER="false" +[[ -n "${IDLE_SESSION_NAME}" ]] && declare -r IDLE_SESSION_NAME=${IDLE_SESSION_NAME} || IDLE_SESSION_NAME="idle_server_${SESSION_NAME}" +[[ -n "${GAME_PORT}" ]] && declare -r GAME_PORT=${GAME_PORT} || GAME_PORT="25565" +[[ -n "${CHECK_PLAYER_TIME}" ]] && declare -r CHECK_PLAYER_TIME=${CHECK_PLAYER_TIME} || CHECK_PLAYER_TIME="30" +[[ -n "${IDLE_IF_TIME}" ]] && declare -r IDLE_IF_TIME=${IDLE_IF_TIME} || IDLE_IF_TIME="1200" + +# Additional configuration options which only few may need to alter +[[ -n "${GAME_COMMAND_DUMP}" ]] && declare -r GAME_COMMAND_DUMP=${GAME_COMMAND_DUMP} || GAME_COMMAND_DUMP="/tmp/${myname}_${SESSION_NAME}_command_dump.txt" + +# Variables passed over the command line will always override the one from a config file +source /etc/conf.d/"${game}" 2>/dev/null || >&2 echo "Could not source /etc/conf.d/${game}" + +# Preserve the content of IDLE_SERVER without making it readonly +[[ -n ${tmp_IDLE_SERVER} ]] && IDLE_SERVER=${tmp_IDLE_SERVER} + + +# Strictly disallow uninitialized Variables +set -u +# Exit if a single command breaks and its failure is not handled accordingly +set -e + +# Check whether sudo is needed at all +if [[ "$(whoami)" == "${GAME_USER}" ]]; then + SUDO_CMD="" +else + SUDO_CMD="sudo -u ${GAME_USER}" +fi + +# Choose which flavor of netcat is to be used +if command -v netcat &> /dev/null; then + NETCAT_CMD="netcat" +elif command -v ncat &> /dev/null; then + NETCAT_CMD="ncat" +else + NETCAT_CMD="" +fi + +# Check for sudo rigths +if [[ "$(${SUDO_CMD} whoami)" != "${GAME_USER}" ]]; then + >&2 echo -e "You have \e[39;1mno permission\e[0m to run commands as $GAME_USER user." + exit 21 +fi + +# Pipe any given argument to the game server console, +# sleep for $sleep_time and return its output if $return_stdout is set +game_command() { + if [[ -z "${return_stdout:-}" ]]; then + ${SUDO_CMD} screen -S "${SESSION_NAME}" -X stuff "$(printf "%s\r" "$*")" + else + ${SUDO_CMD} screen -S "${SESSION_NAME}" -X log on + ${SUDO_CMD} screen -S "${SESSION_NAME}" -X stuff "$(printf "%s\r" "$*")" + sleep "${sleep_time:-0.3}" + ${SUDO_CMD} screen -S "${SESSION_NAME}" -X log off + ${SUDO_CMD} cat "${GAME_COMMAND_DUMP}" + ${SUDO_CMD} rm "${GAME_COMMAND_DUMP}" + fi +} + +# Check whether there are player on the server through list +is_player_online() { + response="$(sleep_time=0.6 return_stdout=true game_command list)" + # Delete leading line and free response string from fancy characters + response="$(echo "${response}" | sed -r -e 's/\x1B\[([0-9]{1,2}(;[0-9]{1,2})*)?[JKmsuG]//g')" + # The list command prints a line containing the usernames after the last occurrence of ": " + # and since playernames may not contain this string the clean player-list can easily be retrieved. + # Otherwise check the first digit after the last occurrence of "There are". If it is 0 then there + # are no players on the server. Should this test fail as well. Assume that a player is online. + if [[ $(echo "${response}" | grep ":" | sed -e 's/.*\: //' | tr -d '\n' | wc -c) -le 1 ]]; then + # No player is online + return 0 + elif [[ "x$(echo "${response}" | grep "There are" | sed -r -e 's/.*\: //' -e 's/^([^.]+).*$/\1/; s/^[^0-9]*([0-9]+).*$/\1/' | tr -d '\n')" == "x0" ]]; then + # No player is online + return 0 + else + # A player is online (or it could not be determined) + return 1 + fi +} + +# Check whether the server is visited by a player otherwise shut it down +idle_server_daemon() { + # This function is run within a screen session of the GAME_USER therefore SUDO_CMD can be omitted + if [[ "$(whoami)" != "${GAME_USER}" ]]; then + >&2 echo "Somehow this hidden function was not executed by the ${GAME_USER} user." + >&2 echo "This should not have happend. Are you messing around with this script? :P" + exit 22 + fi + + # Time in seconds for which no player was on the server + no_player=0 + + while true; do + echo -e "no_player: ${no_player}s\tcheck_player_time: ${CHECK_PLAYER_TIME}s\tidle_if_time: ${IDLE_IF_TIME}s" + # Retry in ${CHECK_PLAYER_TIME} seconds + sleep ${CHECK_PLAYER_TIME} + + if screen -S "${SESSION_NAME}" -Q select . > /dev/null; then + # Game server is up and running + if [[ "$(screen -S "${SESSION_NAME}" -ls | sed -n "s/.*${SESSION_NAME}\s\+//gp")" == "(Attached)" ]]; then + # An administrator is connected to the console, pause player checking + echo "An admin is connected to the console. Pause player checking." + # Check for active player + elif SUDO_CMD="" is_player_online; then + # No player was seen on the server through list + no_player=$(( no_player + CHECK_PLAYER_TIME )) + # Stop the game server if no player was active for at least ${IDLE_IF_TIME} + if [[ "${no_player}" -ge "${IDLE_IF_TIME}" ]]; then + IDLE_SERVER="false" ${myname} stop + # Wait for game server to go down + for i in {1..100}; do + screen -S "${SESSION_NAME}" -Q select . > /dev/null || break + [[ $i -eq 100 ]] && echo -e "An \e[39;1merror\e[0m occurred while trying to reset the idle_server!" + sleep 0.1 + done + # Reset timer and give the player 300 seconds to connect after pinging + no_player=$(( IDLE_IF_TIME - 300 )) + # Game server is down, listen on port ${GAME_PORT} for incoming connections + echo -n "Netcat: " + ${NETCAT_CMD} -v -l -p ${GAME_PORT} && echo "Netcat caught an connection. The server is coming up again..." + IDLE_SERVER="false" ${myname} start + fi + else + # Reset timer since there is an active player on the server + no_player=0 + fi + else + # Reset timer and give the player 300 seconds to connect after pinging + no_player=$(( IDLE_IF_TIME - 300 )) + # Game server is down, listen on port ${GAME_PORT} for incoming connections + echo -n "Netcat: " + ${NETCAT_CMD} -v -l -p ${GAME_PORT} && echo "Netcat caught an connection. The server is coming up again..." + IDLE_SERVER="false" ${myname} start + fi + done +} + +# Start the server if it is not already running +server_start() { + # Start the game server + if ${SUDO_CMD} screen -S "${SESSION_NAME}" -Q select . > /dev/null; then + echo "A screen ${SESSION_NAME} session is already running. Please close it first." + else + echo -en "Starting server..." + ${SUDO_CMD} screen -dmS "${SESSION_NAME}" /bin/bash -c "cd '${SERVER_ROOT}'; ${SERVER_START_CMD}" + local PID=$(${SUDO_CMD} screen -list | grep "\.papermc" | cut -f1 -d'.' | sed 's/\W//g') + echo -en " on process ${PID}..." + echo ${PID} > /run/papermc/papermc.pid + ${SUDO_CMD} screen -S "${SESSION_NAME}" -X logfile "${GAME_COMMAND_DUMP}" + echo -e "\e[39;1m done\e[0m" + fi + + if [[ "${IDLE_SERVER,,}" == "true" ]]; then + # Check for the availability of the netcat (nc) binaries + if [[ -z "${NETCAT_CMD}" ]]; then + >&2 echo "The netcat binaries are needed for suspending an idle server." + exit 12 + fi + + # Start the idle server daemon + if ${SUDO_CMD} screen -S "${IDLE_SESSION_NAME}" -Q select . > /dev/null; then + ${SUDO_CMD} screen -S "${IDLE_SESSION_NAME}" -X quit + # Restart as soon as the idle_server_daemon has shut down completely + for i in {1..100}; do + if ! ${SUDO_CMD} screen -S "${IDLE_SESSION_NAME}" -Q select . > /dev/null; then + ${SUDO_CMD} screen -dmS "${IDLE_SESSION_NAME}" /bin/bash -c "${myname} idle_server_daemon" + break + fi + [[ $i -eq 100 ]] && echo -e "An \e[39;1merror\e[0m occurred while trying to reset the idle_server!" + sleep 0.1 + done + else + echo -en "Starting idle server daemon..." + ${SUDO_CMD} screen -dmS "${IDLE_SESSION_NAME}" /bin/bash -c "${myname} idle_server_daemon" + echo -e "\e[39;1m done\e[0m" + fi + fi +} + +# Stop the server gracefully by saving everything prior and warning the users +server_stop() { + # Quit the idle daemon + if [[ "${IDLE_SERVER,,}" == "true" ]]; then + # Check for the availability of the netcat (nc) binaries + if [[ -z "${NETCAT_CMD}" ]]; then + >&2 echo "The netcat binaries are needed for suspending an idle server." + exit 12 + fi + + if ${SUDO_CMD} screen -S "${IDLE_SESSION_NAME}" -Q select . > /dev/null; then + echo -en "Stopping idle server daemon..." + ${SUDO_CMD} screen -S "${IDLE_SESSION_NAME}" -X quit + echo -e "\e[39;1m done\e[0m" + else + echo "The corresponding screen session for ${IDLE_SESSION_NAME} was already dead." + fi + fi + + # Gracefully exit the game server + if ${SUDO_CMD} screen -S "${SESSION_NAME}" -Q select . > /dev/null; then + # Game server is up and running, gracefully stop the server when there are still active players + + # Check for active player + if is_player_online; then + # No player was seen on the server through list + echo -en "Server is going down..." + game_command stop + else + # Player(s) were seen on the server through list (or an error occurred) + # Warning the users through the server console + game_command say "Server is going down in 10 seconds! HURRY UP WITH WHATEVER YOU ARE DOING!" + game_command save-all + echo -en "Server is going down in..." + for i in {1..10}; do + game_command say "down in... $(( 10 - i ))" + echo -n " $(( 10 - i ))" + sleep 1 + done + game_command stop + fi + + # Finish as soon as the server has shut down completely + for i in {1..100}; do + if ! ${SUDO_CMD} screen -S "${SESSION_NAME}" -Q select . > /dev/null; then + echo -e "\e[39;1m done\e[0m" + break + fi + [[ $i -eq 100 ]] && echo -e "\e[39;1m timed out\e[0m" + sleep 0.1 + done + else + echo "The corresponding screen session for ${SESSION_NAME} was already dead." + fi +} + +# Print whether the server is running and if so give some information about memory usage and threads +server_status() { + # Print status information about the idle daemon + if [[ "${IDLE_SERVER,,}" == "true" ]]; then + # Check for the availability of the netcat (nc) binaries + if [[ -z "${NETCAT_CMD}" ]]; then + >&2 echo "The netcat binaries are needed for suspending an idle server." + exit 12 + fi + + if ${SUDO_CMD} screen -S "${IDLE_SESSION_NAME}" -Q select . > /dev/null; then + echo -e "Idle server daemon status:\e[39;1m running\e[0m" + else + echo -e "Idle server daemon status:\e[39;1m stopped\e[0m" + fi + fi + + # Print status information for the game server + if ${SUDO_CMD} screen -S "${SESSION_NAME}" -Q select . > /dev/null; then + echo -e "Status:\e[39;1m running\e[0m" + + # Calculating memory usage + for p in $(${SUDO_CMD} pgrep -f "${MAIN_EXECUTABLE}"); do + ps -p"${p}" -O rss | tail -n 1; + done | gawk '{ count ++; sum += $2 }; END {count --; print "Number of processes =", count, "(screen, bash,", count-2, "x server)"; print "Total memory usage =", sum/1024, "MB" ;};' + else + echo -e "Status:\e[39;1m stopped\e[0m" + fi +} + +# Restart the complete server by shutting it down and starting it again +server_restart() { + if ${SUDO_CMD} screen -S "${SESSION_NAME}" -Q select . > /dev/null; then + server_stop + server_start + else + server_start + fi +} + +# Backup the directories specified in BACKUP_PATHS +backup_files() { + # Check for the availability of the tar binaries + if ! command -v tar &> /dev/null; then + >&2 echo "The tar binaries are needed for a backup." + exit 11 + fi + + echo "Starting backup..." + fname="$(date +%Y_%m_%d_%H.%M.%S).tar.gz" + ${SUDO_CMD} mkdir -p "${BACKUP_DEST}" + if ${SUDO_CMD} screen -S "${SESSION_NAME}" -Q select . > /dev/null; then + game_command save-off + game_command save-all + sync && wait + ${SUDO_CMD} tar -C "${SERVER_ROOT}" -cf "${BACKUP_DEST}/${fname}" ${BACKUP_PATHS} --totals ${BACKUP_FLAGS} 2>&1 | grep -v "tar: Removing leading " + game_command save-on + else + ${SUDO_CMD} tar -C "${SERVER_ROOT}" -cf "${BACKUP_DEST}/${fname}" ${BACKUP_PATHS} --totals ${BACKUP_FLAGS} 2>&1 | grep -v "tar: Removing leading " + fi + echo -e "\e[39;1mbackup completed\e[0m\n" + + echo -n "Only keeping the last ${KEEP_BACKUPS} backups and removing the other ones..." + backup_count=$(for f in "${BACKUP_DEST}"/[0-9_.]*; do echo "${f}"; done | wc -l) + if [[ $(( backup_count - KEEP_BACKUPS )) -gt 0 ]]; then + for old_backup in $(for f in "${BACKUP_DEST}"/[0-9_.]*; do echo "${f}"; done | head -n"$(( backup_count - KEEP_BACKUPS ))"); do + ${SUDO_CMD} rm "${old_backup}"; + done + echo -e "\e[39;1m done\e[0m ($(( backup_count - KEEP_BACKUPS)) backup(s) pruned)" + else + echo -e "\e[39;1m done\e[0m (no backups pruned)" + fi +} + +# Restore backup +backup_restore() { + # Check for the availability of the tar binaries + if ! command -v tar &> /dev/null; then + >&2 echo "The tar binaries are needed for a backup." + exit 11 + fi + + # Only allow the user to restore a backup if the server is down + if ${SUDO_CMD} screen -S "${SESSION_NAME}" -Q select . > /dev/null; then + >&2 echo -e "The \e[39;1mserver should be down\e[0m in order to restore the world data." + exit 3 + fi + + # Either let the user choose a backup or expect one as an argument + if [[ $# -lt 1 ]]; then + echo "Please enter the corresponding number for the backup to be restored: " + i=1 + for f in "${BACKUP_DEST}"/[0-9_.]*; do + echo -e " \e[39;1m$i)\e[0m\t$f" + i=$(( i + 1 )) + done + echo -en "Restore backup number: " + + # Read in user input + read -r user_choice + + # Interpeting the input + if [[ $user_choice =~ ^-?[0-9]+$ ]]; then + n=1 + for f in "${BACKUP_DEST}"/[0-9_.]*; do + [[ ${n} -eq $user_choice ]] && fname="$f" + n=$(( n + 1 )) + done + if [[ -z $fname ]]; then + >&2 echo -e "\e[39;1mFailed\e[0m to interpret your input. Please enter the digit of the presented options." + exit 5 + fi + else + >&2 echo -e "\e[39;1mFailed\e[0m to interpret your input. Please enter a valid digit for one of the presented options." + exit 6 + fi + elif [[ $# -eq 1 ]]; then + # Check for the existance of the specified file + if [[ -f "$1" ]]; then + fname="$1" + else + if [[ -f "${BACKUP_DEST}"/"$1" ]]; then + fname="${BACKUP_DEST}"/"$1" + else + >&2 echo -e "Sorry, but '$1', is \e[39;1mnot a valid file\e[0m, neither in your current directory nor in the backup folder." + exit 4 + fi + fi + elif [[ $# -gt 1 ]]; then + >&2 echo -e "\e[39;1mToo many arguments.\e[0m Please pass only the filename for the world data as an argument." + >&2 echo "Or alternatively, no arguments at all to choose from a list of available backups." + exit 7 + fi + + echo "Restoring backup..." + if ${SUDO_CMD} tar -xf "${fname}" -C "${SERVER_ROOT}" 2>&1; then + echo -e "\e[39;1mRestoration completed\e[0m" + else + echo -e "\e[39;1mFailed to restore backup.\e[0m" + fi +} + +# Run the given command at the game server console +server_command() { + if [[ $# -lt 1 ]]; then + >&2 echo "No server command specified. Try 'help' for a list of commands." + exit 1 + fi + + if ${SUDO_CMD} screen -S "${SESSION_NAME}" -Q select . > /dev/null; then + return_stdout=true game_command "$@" + else + echo "There is no ${SESSION_NAME} session to connect to." + fi +} + +# Enter the screen game session +server_console() { + if ${SUDO_CMD} screen -S "${SESSION_NAME}" -Q select . > /dev/null; then + # Circumvent a permission bug related to running GNU screen as a different user, + # see e.g. https://serverfault.com/questions/116775/sudo-as-different-user-and-running-screen + ${SUDO_CMD} script -q -c "screen -S \"${SESSION_NAME}\" -rx" /dev/null + else + echo "There is no ${SESSION_NAME} session to connect to." + fi +} + +# Help function, no arguments required +help() { + cat <<-EOF + This script was designed to easily control any ${game} server. Almost any parameter for a given + ${game} server derivative can be changed by editing the variables in the configuration file. + + Usage: ${myname} {start|stop|restart|status|backup|restore|command |console} + start Start the ${game} server + stop Stop the ${game} server + restart Restart the ${game} server + status Print some status information + backup Backup the world data + restore [filename] Restore the world data from a backup + command Run the given command at the ${game} server console + console Enter the server console through a screen session + + Copyright (c) Gordian Edenhofer + EOF +} + +case "${1:-}" in + start) + server_start + ;; + + stop) + server_stop + ;; + + status) + server_status + ;; + + restart) + server_restart + ;; + + console) + server_console + ;; + + command) + server_command "${@:2}" + ;; + + backup) + backup_files + ;; + + restore) + backup_restore "${@:2}" + ;; + + idle_server_daemon) + # This shall be a hidden function which should only be invoced internally + idle_server_daemon + ;; + + -h|--help) + help + exit 0 + ;; + + *) + help + exit 1 + ;; +esac + +exit 0 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